原代碼三大語法錯誤
- 調用語法錯誤:
void bubsort(name,9); 不能在調用時帶類型修飾符,應為 bubsort(name, 9);。
- 打印解引用錯誤:
printf("%s ", *name[i]); 同前文,*name[i] 取到首字符導致格式不匹配,應為 name[i]。
- 排序邏輯缺陷:交換時使用
char d 僅交換首字符,應交換指針 char *tmp = name[i]; name[i] = name[i+1]; name[i+1] = tmp;。
修正後完整代碼
#include <stdio.h>
#include <string.h>
void bubsort(char *name[], int n) {
int i, j, k = 0, m = n - 1;
while (k < m) {
j = m - 1;
for (i = 0; i <= j; i++)
if (strcmp(name[i], name[i+1]) > 0) {
char *tmp = name[i];
name[i] = name[i+1];
name[i+1] = tmp;
m = i;
}
for (i = n-1; i >= 1; i--)
if (strcmp(name[i-1], name[i]) > 0) {
char *tmp = name[i];
name[i] = name[i-1];
name[i-1] = tmp;
k = i;
}
}
}
int main() {
int i;
char *name[] = {"zhang","gou","xu","zheng","mao","zhao","li","bai","qing"};
for (i = 0; i < 9; i++) printf("%s ", name[i]);
bubsort(name, 9);
printf("\n");
for (i = 0; i < 9; i++) printf("%s ", name[i]);
printf("\n");
return 0;
}
關鍵點總結
strcmp 返回值判斷:>0 表示前者大,需交換。
- 指針數組排序本質是交換指針值,不移動字符串內容,效率高。
- 主函數返回類型應為
int,並返回 0。