C语言中二维数组看作一维数组的排序

img


#include  
#include  
void main(){
    char a[6][7]={"Tom","Mary","Jack","Rose","Harry","Alice"};
    int i,j;
    char t[7];
    for(i=0;i<6;i++)
    for(j=0;j<5-i;j++)
    if(strcmp(a[j],a[j+1])>0) {strcpy(t[7],a[j]);strcpy(a[j],a[j+1]);strcpy(a[j+1],t[7]);}
    else break;
    for(i=0;i<6;i++)
    printf("%s\n",a[i]);
}
  • 先看效果:

img

  • 修改如下:
#include <stdio.h> 
#include <string.h> 
int main(){
    char a[6][7]={"Tom","Mary","Jack","Rose","Harry","Alice"};
    int i,j;
    char t[7];
    for(i=0;i<5;i++)
        for(j=0;j<5-i;j++)
            if(strcmp(a[j],a[j+1])>0) 
            {
                strcpy(t,a[j]);
                strcpy(a[j],a[j+1]);
                strcpy(a[j+1],t);
            }
    
    for(i=0;i<6;i++)
        printf("%s\n",a[i]);
    return 0;
}

评论区有位大神帮我改正了但我不太懂为啥这么改
为啥strcpy那里是t而不是t[]
还有为什么if后面不用else break呢


#include <stdio.h> 
#include <string.h> 
int main(){
    char a[6][7]={"Tom","Mary","Jack","Rose","Harry","Alice"};
    int i,j;
    char t[7];
    for(i=0;i<5;i++)
        for(j=0;j<5-i;j++)
            if(strcmp(a[j],a[j+1])>0) 
            {
                strcpy(t,a[j]);
                strcpy(a[j],a[j+1]);
                strcpy(a[j+1],t);
            }
    for(i=0;i<6;i++)
        printf("%s\n",a[i]);
    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^