原创博文,转载请注明出处!
# 基本思想
”快速排序“是对”冒泡排序“的改进。
基本原理:基于分治法,在待排线性表中取一个元素pivot作为枢轴值,通过一趟排序将待排线性表划分为独立的两部分,第一部分的所有元素小于pivot,第二部分的所有元素大于等于pivot,pivot位于其最终位置。递归对两个子表做快速排序。
# C++代码
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 // 一次快速排序 6 int partition(vector<int> &a, int low, int high) 7 { 8 // 枢轴值(线性表第一个元素作为枢轴值) 9 int key = a[low]; 10 while(low < high) 11 { 12 // 从右侧中找小于pivot的值,然后覆盖low位置 13 while(low < high && a[high] >= key) 14 --high; 15 a[low] = a[high]; 16 17 // 从左侧中找大于pivot的值,然后覆盖high位置 18 while(low < high && a[low] <= key) 19 ++low; 20 a[high] = a[low]; 21 } 22 a[low] = key; 23 return low; 24 } 25 26 //快速排序的递归形式 27 void QuickSort(vector<int> &a, int low, int high) 28 { 29 if(low < high) 30 { 31 int loc = partition(a, low, high);//一趟排序结果的调用 32 QuickSort(a, low, loc-1); 33 QuickSort(a, loc+1, high); 34 } 35 } 36 int main() 37 { 38 vector<int> a={46,79,56,38,40,84}; 39 QuickSort(a, 0, a.size()-1); 40 for(int i=0;i<a.size();++i) cout<<a[i]<<‘ ‘; 41 return 0; 42 }