C语言 我到底怎么了?bubblesort关于字符串

w6mmgewl  于 2023-01-04  发布在  其他
关注(0)|答案(1)|浏览(123)
#include <stdio.h>
#include <string.h>

void bubblesort(int n, char *ptr[]){
    char *tmp;
    for (int i = 0; i < n; i++){    
        for (int j = 0 ; j < n; j++){
            if(strcmp(*(ptr+i) , *(ptr+j))>0){
                strcpy(tmp , *(ptr+i));
                strcpy(*(ptr+i) , *(ptr+j));
                strcpy(*(ptr+j) , tmp);
            }
        }
    }
     //printf("\n",ptr+0,ptr+1,ptr+2,ptr+3,ptr+4,ptr+5,ptr+6,ptr+7,ptr+8,ptr+9); **<= without this line my code doesn't executive**
}

int main()
{
    int n;
    scanf("%d\n", &n);
    char str[10][20];
    for (int i = 0; i < n; i++)
 gets(str[i]);
    char *ptr[10];
    for (int i = 0; i < n; i++)
        ptr[i] = str[i];
    bubblesort(n, ptr);
    for (int i = 0; i < n; i++)
        puts(ptr[i]);
}

C:\Users\kk\Desktop\C〉a 10香蕉猕猴桃苹果西红柿柠檬甜瓜梨蓝莓草莓橙子
西红柿草莓梨橙子甜瓜柠檬猕猴桃蓝莓香蕉苹果
C:\用户\kk\桌面\C〉
线上无
C:\Users\kk\Desktop\C〉a 10香蕉猕猴桃苹果西红柿柠檬甜瓜梨蓝莓草莓橙子
C:\用户\kk\桌面\C〉'

jyztefdp

jyztefdp1#

1.内部循环应使用jj + 1,而不是ij,并且该循环的j条件不正确。
1.当你操作字符串的指针时,你可以交换它们,而不是复制字符串本身,写swap()函数比内联更清楚。
1.最后,gets()使用起来并不安全,对于这类问题,最好硬编码一个测试用例。

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

void swap(char **a, char **b) {
    char *tmp = *a;
    *a = *b;
    *b = tmp;
}

void bubblesort(size_t n, char *ptr[n]) {
    if(n < 2) return;
    for (size_t i = 0; i < n - 1; i++)
        for (size_t j = 0; j < n - i - 1; j++)
            if(strcmp(ptr[j], ptr[j + 1]) > 0)
                swap(&ptr[j], &ptr[j + 1]);
}

int main() {
    char *a[] = {
        "Lorem",
        "ipsum",
        "dolor",
        "sit",
        "amet"
    };
    size_t n = sizeof a / sizeof *a;
    bubblesort(n, a);
    for (int i = 0; i < n; i++)
        puts(a[i]);
}

下面是输出:

Lorem
amet
dolor
ipsum
sit

相关问题