C++で配列をソートする方法は何ですか?
C++には、配列をソートするためのさまざまな方法がありますが、以下は一般的ないくつかの方法です:
- バブルソート:隣接した要素の大小を比較し、位置を交換しながら、大きな値を徐々に配列の最後に「冒泡」させる。
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
- 選択ソート:未ソート部分から最小(または最大)の要素を見つけ、未ソート部分の最初の要素と交換します。
void selectionSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
int minIndex = i;
for (int j = i+1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
- 挿入ソート(Insertion Sort):配列をソート済み部分と未ソート部分に分け、未ソート部分の最初の要素を適切な位置に挿入する。
void 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;
}
}
- クイックソート:基準要素を選択し、配列を2つのサブ配列に分割し、左側の要素は基準以下であり、右側の要素は基準よりも大きいです。サブ配列を再帰的にクイックソートします。
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j <= high-1; 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;
}
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi-1);
quickSort(arr, pi+1, high);
}
}
これらは一般的なソートアルゴリズムの一部であり、C++には他のソートアルゴリズムの実装もあります。実際の状況や要求に応じて、適切なソートアルゴリズムを選択することで、ソートの効率を向上させリソースの消費を減らすことができます。