如何在 C 中输出冒泡排序的二维字符串数组?

How do I output a bubble sorted 2-D string array in C?

我如何使用冒泡排序(或与此相关的任何其他类型的排序)对 C 中的二维字符串数组进行排序? 我正在尝试做的事情如下:

示例:

未排序的二维字符串数组:

abfg 
abcd 
xyzw 
pqrs 
orde

已排序的二维字符串数组:

abcd 
abfg 
orde 
pqrs 
xyzw

我当前的算法不起作用(给我一个不兼容错误)如下:

#include <stdio.h>
#include<string.h>



int main()
{
    char str[5][4];
    int i,j;
    char temp[4];
    for (i=0;i<5;i++)
    {
        scanf("%s",str[i]);

    }


   for(i = 0; i<5-1; i++) 
   { 
     for(j = 0; j<5-1; j++) 
     {
         if(strcmp(str[j],str[j+1])== -1) 
        { 
            temp = str[j]; 
            str[j] = str[j+1]; 
            str[j+1] = temp; 
         }

     } 
   } 

   for(i = 0; i< 5; i++) 
     printf("%s ", str[i]);


    return 0;
}

数组不可分配,因为您在 C 中尝试。您需要设置一些缓冲区交换逻辑。例如。

if(strcmp(str[j+1],str[j]) < 0) // note: fixed. 
{
    strcpy(temp, str[j]);
    strcpy(str[j], str[j+1]);
    strcpy(str[j+1], temp);
}            

您的代码的其他问题:

  • 输入数组的大小不正确。所有这些字符串至少需要 char[5] 来容纳四字符字符串(包括终止符 space)。
  • 您没有对输入字符串的长度进行长度限制。对于四个字符的数组,格式字符串应为 "%3s",这会暗示您的维度太短而无法开始。
  • 您没有通过检查 scanf
  • 的结果来验证输入是否成功
  • 与上述相关,您确实知道跟踪了多少成功输入,因此您不知道您的数据排序是否针对不确定的垃圾。如果只输入3个字符串成功,对5个字符串的数组进行排序是没有意义的。
  • 您的冒泡排序未正确实施。真正的 bubblesort 包括 swap-detection,它在任何给定的 pass 导致无交换后停止排序算法。您也没有将每次迭代扫描的元素数量减少一个,这首先是冒泡排序的要点。

无论如何,所有这些都与您的代码有关,但与您发布的问题无关。无论如何都值得一看。

祝你好运。