char *fruits[] = {"banana", "apple", "pear", "orange"};
// 記憶體: fruits[0]──>"banana\0" (唯讀區)
// fruits[1]──>"apple\0"
// 陣列大小固定,元素為指標
void sort_strings(char **arr, int n) {
for (int i = 0; i < n-1; ++i)
for (int j = 0; j < n-1-i; ++j)
if (strcmp(arr[j], arr[j+1]) > 0) {
char *tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
#include <stdio.h>
#include <string.h>
void print_arr(char **arr, int n) {
for (int i=0; i
| 方法 | 操作 | 時間複雜度 | 記憶體搬移 |
|---|---|---|---|
| 指標交換 | 交換 4/8 位元組指標 | O(n²) 比較 + O(1) 交換 | 極小 |
| strcpy 複製 | 逐字元複製字串內容 | O(n² * L) | 大量 |
L 為平均字串長度。指標交換法是 C 語言排序字串的標準高效做法。
malloc 複製一份。qsort 標準庫函數同樣接受比較函數指標,內部也是交換指標。