字串排序的優化
阿新 • • 發佈:2021-02-14
技術標籤:# 演算法題
對char s[5][10] = { "hi","hello","world","baby","ada"}進行排序
直接交換字元陣列,修改記憶體內容的時間很長:如果一個字串100B,那交換一次,就要修改大小為100B的記憶體兩次,效率很低。
而如果交換的是字串的指標,則效率很高,因為指標大小固定為4B,交換一次,總共只修改了8B記憶體
int main()//陣列指標的解法:低效 { char s[5][10] = { "hi","hello","world","baby","ada" }; //氣泡排序 for (int i = 0; i < 4; i++) { for (int j = 4; j > i; j--) { if (strcmp(s[j] , s[j - 1]) < 0) { char t[10] = { 0 }; strcpy(t , s[j - 1]); strcpy(s[j - 1] , s[j]); strcpy(s[j] , t); } } } for (int i = 0; i < 5; i++) { printf("%s\n" , s[i]); } return 0; }
int main()//指標陣列的解法:高效 { char s[5][10] = { "hi","hello","world","baby","ada" }; char *p[5] = { 0 };//存放排好序的字元指標,p是二級指標(char**) for (int i = 0; i < 5; i++) { p[i] = s[i]; } //氣泡排序 for (int i = 0; i < 4; i++) { for (int j = 4; j > i; j--) { if (strcmp(p[j] , p[j - 1]) < 0) { char *t = p[j]; p[j] = p[j - 1]; p[j - 1] = t; } } } for (int i = 0; i < 5; i++) { printf("%s\n" , p[i]); } return 0; }