實現(xiàn)快速排序算法及其原理
---快速排序簡介快速排序(quick sort)是一種由東尼·霍爾提出的高效排序算法,其時間復雜度為O(n*log n),遠優(yōu)于冒泡算法等其他常見排序算法??焖倥判蛲ㄟ^選擇中樞元素、分割數(shù)組和遞歸處
---
快速排序簡介
快速排序(quick sort)是一種由東尼·霍爾提出的高效排序算法,其時間復雜度為O(n*log n),遠優(yōu)于冒泡算法等其他常見排序算法??焖倥判蛲ㄟ^選擇中樞元素、分割數(shù)組和遞歸處理三個主要步驟來實現(xiàn)排序。
---
快速排序算法描述
1. 選擇中樞元素:可以是第一個元素、最后一個元素或隨機位置的元素。
2. 分割數(shù)組:將數(shù)組分成大于和小于中樞元素的兩個子數(shù)組,并對子數(shù)組進行排列。
3. 遞歸處理:對上述兩個子數(shù)組分別重復步驟1和2,直至整個數(shù)組有序。
---
示例演示
以未排序數(shù)組{1, 12, 5, 26, 7, 14, 3, 7, 2}為例,展示快速排序的具體過程:
1. 選取中樞元素:選擇中間位置的元素作為中樞元素。
2. 分割數(shù)組:將小于中樞值的元素放在左邊,大于中樞值的元素放在右邊。
3. 通過遞歸的方式不斷處理子數(shù)組,直到整個數(shù)組排序完成。
---
快速排序代碼實現(xiàn)
下面是使用C 語言實現(xiàn)快速排序算法的示例代碼:
```cpp
include
using namespace std;
void swap(int *x, int *y) {
int t *x;
*x *y;
*y t;
}
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 ;
swap(arr[i], arr[j]);
}
}
swap(arr[i 1], arr[high]);
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);
}
}
int main() {
int arr[] {10, 7, 8, 9, 1, 5};
int n sizeof(arr) / sizeof(int);
quicksort(arr, 0, n - 1);
cout << "Sorted array: ";
for (int i 0; i < n; i ) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
以上代碼演示了如何使用快速排序算法對數(shù)組進行排序,并輸出排序后的結果。
---
通過本文的介紹,讀者可以更加深入地了解快速排序算法的原理和實現(xiàn)方法,從而在實際應用中更好地運用這一高效的排序算法。