2 cannontim cannontim 于 2017.08.31 22:43 提问

字符串排序问题,小白蒙蔽中。。 5C

将三个给定的字符串依据长度从小到大显示出来,结果却只是第一行和第三行调换了位置,求大佬看看代码问题出在哪里。。
#include
#include
int main(void)
{
int i, j;
int n = 3;
char abb[3][20] =
{
"333",
"22",
"1"
};
char temp[20];

for (i = 0; i < n; i++)
{
    for (j = i + 1; j < n; j++)
    {
        if (strlen(abb[i]) - strlen(abb[j])>0)
        {
            strcpy(temp, abb[i]);
            strcpy(abb[i],abb[j]);
            strcpy(abb[j], temp);
        }
    }
}
for (i = 0; i < n; i++)
{
    puts(abb[i]);
    printf("%d\n", strlen(abb[i]));

}

getchar();
return 0;

}

6个回答

linqin107412
linqin107412   2017.09.01 09:16

C不怎么会,但是你这应该是冒泡排序吧,你的逻辑太混乱了,给你个java版本的,你自己参考下吧,第一层循环,表示有多少数要进行比较,
第二层循环表示这些数真正的去比较大小,循环结束后会把最大的取出来放在数组最后面,然后进行第二个数的比较,已经取出来了最大的,所以省略一次,所以用before.length-i-1。想了解具体,建议楼主看下冒泡排序。
public static int[] bubbleSort(int[] before) {
int temp;
for(int i = 0;i < before.length;i++) {
for(int j = 0;j < before.length - i - 1;j++) {
if(before[j] > before[j+1]) {
temp = before[j];
before[j] = before[j+1];
before[j+1] = temp;
}
}
}
return before;
}
@org.junit.Test
public void testBubbleSort() {
int[] arr = {1,3,2,44,22,477,222,45};
System.out.println(Arrays.toString(bubbleSort(arr)));
}

songwz123
songwz123   2017.09.01 09:18

将三个给定的字符串依据长度从小到大显示出来,结果却只是第一行和第三行调换了位置 换了不是对的?

qq_24029841
qq_24029841   2017.09.01 09:20

他这不是冒泡,就是个最直接的暴力排序

m0_37894611
m0_37894611   2017.09.01 11:58

第一三行交换位置,没错啊。。。你哪里出错了?

SonOfWind0311
SonOfWind0311   2017.09.01 13:49

没有毛病,第一和第三行换完之后结果是:“1”,“22”“333”,长度是1,2,3,完全符合预期。

Mr_cuiwei
Mr_cuiwei   2017.09.01 17:15

发来运行结果,分析下哪错了

Csdn user default icon
上传中...
上传图片
插入图片