算法描述
快速排序由冒泡排序演进而来,基于分治的算法思想。每次排序时选择一个元素作为“基准值”,经过一轮排序,通过某种划分算法将待排表分为左右两部分,其中左边的元素全都小于基准值,右边元素全都大于基准值。这样,基准值就被放在了它的最终位置。随后,再对左右两个子表递归进行上述操作,最终能够实现排序目的。
快速排序算法的性能取决于划分算法的优劣。以下将结合程序简单介绍快速排序算法的C++实现。
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| #include <iostream> #include <fstream> using namespace std; const int n = 8;
int partition(int arr[], int low, int high){ int pivot = arr[low]; while(low < high){ while(arr[high] >= pivot && low < high) --high; arr[low] = arr[high]; while(arr[low] <= pivot && low < high) ++low; arr[high] = arr[low]; } arr[low] = pivot; return low; }
void quick_sort(int arr[], int low, int high){ if(low > high) return; int mid = partition(arr, low, high); quick_sort(arr, low, mid-1); quick_sort(arr, mid+1, high); }
int main(){ fstream inFile; inFile.open("in.txt"); int *arr = new int[n]; for(int i=0; i<n; ++i) inFile >> arr[i];
quick_sort(arr, 0, n-1); for(int i=0; i<n; ++i) cout << arr[i] << " ";
delete[] arr; inFile.close(); return 0; }
|
算法分析
(1)时间复杂度为O(nlogn),空间复杂度为O(n);快速排序是所有内部排序算法中平均性能最好的排序算法。
(2)快速排序算法不是一个稳定的排序方法。
转载请注明来源:©Tinshine