C言語でのソート方法は何ですか?
C言語には、配列やリストのソートを実現するために複数のソートアルゴリズムがあります。一般的なソートアルゴリズムは以下の通りです:
- バブルソート:隣接する要素を比較し、より大きな要素を徐々に末尾に交換することで、時間計算量はO(n^2)になります。
- バブルソート関数は、与えられた配列を昇順に並び替える。
- 挿入ソート:配列をソート済み部分と未ソート部分に分け、未ソート部分から要素を選んでソート済み部分の適切な位置に挿入する方法。時間計算量はO(n^2)。
- int insertionSort(int arr[], int n) {
for (int i = 1; i < n; i++) { int key = arr[i]; int j = i – 1; while (j >= 0 && arr[j] > key) {
arr[j+1] = arr[j];
j–;
}
arr[j+1] = key;
}
} - 選択ソート:未ソート部分から最小(または最大)の要素を選択し、それを未ソート部分の最初の要素と交換します。時間計算量はO(n^2)です。
- 配列を選択ソートする関数を定義します。
- クイックソート:基準要素を選択し、基準より小さい要素を左側に移動し、基準より大きい要素を右側に移動させ、その後左右の部分を再帰的にクイックソートし、時間計算量はO(nlogn)となります。
- voidクイックソート(int arr []、int low、int high){
if(low <high){
int pivot = partition(arr、low、high);
quickSort(arr、low、pivot-1);
quickSort(arr、pivot + 1、high);
}
}int partition(int arr []、int low、int high){
int pivot = arr [high];
int i = low-1;
for(int j = low; j <high; j ++){
if(arr [j] <pivot){
i ++;
int temp = arr [i];
arr [i] = arr [j];
arr [j] = temp;
}
}
int temp = arr [i + 1];
arr [i + 1] = arr [high];
arr [high] = temp;
return i + 1;
} - マージソート:配列を2つのサブ配列に分割し、それぞれのサブ配列に再帰的にマージソートを適用し、それから2つの並んだサブ配列を1つの並んだ配列にマージする。時間計算量はO(nlogn)。
- 配列の中の要素をマージするメソッドと、それを使って入力された配列をマージソートするメソッドを示します。