gpt4 book ai didi

c - 多维数组的冒泡排序

转载 作者:太空宇宙 更新时间:2023-11-04 00:36:18 25 4
gpt4 key购买 nike

今天我尝试对多维数组进行排序,但我只是想不通,为什么它不起作用。

该算法会交换第一个字母,但不会交换整个字符串。这是一个工作 DEMO这表明该算法按字母顺序打印找到的每个字符串的首字母。

用于交换整个字符串而不仅仅是第一个字母的相同算法不起作用:

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

int main(void){
char arr[][10] = {"Michael" , "Tanja" ,"Adda", "Jenny", "Kimberly", "Walter" , "Donna"};
size_t length = sizeof arr / sizeof *(arr + 0);
unsigned int i,j, k=0;
char *tmp;


for (i = 0 ; i < length-1; i++){
for (k = 0 ; k < length-i-1; k++){
if (arr[k][0] > arr[k+1][0]){
tmp = arr[k];
strcpy(arr[k], arr[k+1]);
strcpy(arr[k+1], tmp);
}
}
}

printf("Sorted Array:\n");
for ( j = 0 ; j < length ; j++ ){
printf("%s ", arr[j]);
}
printf("\n\n");

return 0;
}

我得到的输出是:

Adda  Adda  Adda  Donna  Donna  Donna  Donna

应该是:

Adda Donna Jenny Kimberly Michael Tanja Walter

最佳答案

tmp只是一个指针。所以在分配期间tmp = arr[k];和随后的strcpy() , 由于 arr[k] 而丢失被 arr[k+1] 覆盖.但是您需要在交换期间复制 字符串。所以使用缓冲区:

char tmp[256];

  strcpy(tmp , arr[k]);
strcpy(arr[k], arr[k+1]);
strcpy(arr[k+1], tmp);

关于c - 多维数组的冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34548524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com