ソートアルゴリズムはなんでもいいですが、比較部分で以下の関数を使用します。
- 文字列の長さ比較 strlen()
- 文字列の順序比較 strcmp()
要素 a, b を strlen() で長さを計算し、比較する。
もし長さが同じ場合は、strcmp() で辞書順で比較する。
バブルソートの実装例
c
1#include <stdio.h>
2#include <string.h>
3
4int main()
5{
6 char *month[] = {"January",
7 "February",
8 "March",
9 "April",
10 "May",
11 "June",
12 "July",
13 "August",
14 "September",
15 "October",
16 "November",
17 "December"};
18 size_t len = sizeof(month) / sizeof(month[0]);
19
20 printf(">>>>> before\n");
21 for (int i = 0; i < len; ++i)
22 printf("%s\n", month[i]);
23
24 // バブルソート
25 //////////////////////////////////////////////
26 for (int i = 0; i < len - 1; ++i) {
27 for (int j = len - 1; j > i; --j) {
28 size_t len1 = strlen(month[j]);
29 size_t len2 = strlen(month[j - 1]);
30
31 if (len1 < len2
32 || (len1 == len2 && strcmp(month[j], month[j - 1]) < 0)) {
33 // swap
34 char *temp = month[j];
35 month[j] = month[j - 1];
36 month[j - 1] = temp;
37 }
38 }
39 }
40
41 printf(">>>>> after\n");
42 for (int i = 0; i < len; ++i)
43 printf("%s\n", month[i]);
44}
45
>>>>> ソート前
January
February
March
April
May
June
July
August
September
October
November
December
>>>>> ソート後
May
July
June
April
March
August
January
October
December
February
November
September