今天我试着对多维数组进行排序,但我无法弄清楚,为什么它不起作用。多维数组上的气泡排序
该算法执行第一个字母的交换,但不交换整个字符串。这是一个工作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 = ARR [K];'存储的'ARR [K]''中的tmp'地址。记住:内存地址是不变的,不会改变。此外,您可以使用'sizeof * arr'而不是'sizeof *(arr + 0)' –
@CoolGuy我知道,我想我只是忽略了那部分。谢谢你,祝你新年快乐。 – Michi