今天我試着對多維數組進行排序,但我無法弄清楚,爲什麼它不起作用。多維數組上的氣泡排序
該算法執行第一個字母的交換,但不交換整個字符串。這是一個工作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