排名次c++
在C++中,可以使用各種排序算法對數據進行排序。以下是一些常用的排序算法及其在C++中的實現示例:
-
冒泡排序(Bubble Sort)
void bubbleSort(int array[], int size) { for (int i = 0; i < size; i++) { for (int j = 0; j < size - 1 - i; j++) { if (array[j] > array[j + 1]) { swap(array[j], array[j + 1]); } } } }
-
選擇排序(Selection Sort)
void selectionSort(int array[], int size) { for (int i = 0; i < size - 1; i++) { int minIndex = i; for (int j = i + 1; j < size; j++) { if (array[j] < array[minIndex]) { minIndex = j; } } swap(array[i], array[minIndex]); } }
-
插入排序(Insertion Sort)
void insertionSort(int array[], int size) { for (int i = 1; i < size; i++) { int key = array[i]; int j = i - 1; while (j >= 0 && array[j] > key) { array[j + 1] = array[j]; j--; } array[j + 1] = key; } }
-
快速排序(Quick Sort)
void quickSort(int array[], int low, int high) { if (low < high) { int pi = partition(array, low, high); quickSort(array, low, pi - 1); quickSort(array, pi + 1, high); } }
int partition(int array[], int low, int high) { int pivot = array[high]; int i = (low - 1); for (int j = low; j <= high - 1; j++) { if (array[j] < pivot) { i++; swap(array[i], array[j]); } } swap(array[i + 1], array[high]); return (i + 1); }
5. 歸併排序(Merge Sort)
```cpp
void merge(int array[], int low, int mid, int high) {
int n1 = mid - low + 1;
int n2 = high - mid;
int L[n1], R[n2];
for (int i = 0; i < n1; i++)
L[i] = array[low + i];
for (int j = 0; j < n2; j++)
R[j] = array[mid + 1 + j];
int i = 0;
int j = 0;
int k = low;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
array[k] = L[i];
i++;
} else {
array[k] = R[j];
j++;
}
k++;
}
while (i < n1) {
array[k] = L[i];
i++;
k++;
}
while (j < n2) {
array[k] = R[j];
j++;
k++;
}
}
void mergeSort(int array[], int low, int high) {
if (low < high) {
int mid = (low + high) / 2;
mergeSort(array, low, mid);
mergeSort(array, mid + 1, high);
merge(array, low, mid, high);
}
}
以上是一些基本的排序算法的C++實現。在實際套用中,選擇排序算法時需要考慮數據規模、數據特點以及算法的時間複雜度和空間複雜度。例如,快速排序在大多數情況下比冒泡排序更高效,但它的性能受制於分區策略。歸併排序通常在數據已經排序或者接近排序的情況下表現不佳。選擇排序算法時,還需要考慮算法的穩定性、是否原地排序(in-place)等因素。