快速排序 c++
#include <iostream> #include <vector> using namespace std; //快速排序的核心部分就是partition,即每次都选定待排序数组A的最后一个元素为key,每一次partition后, //会把待排序数组分为三部分:小于key,key,大于key。p表示A的第一个元素,r表示A的最后一个元素。 int partition(vector<int>& A,int p,int r) { int x=A[r]; int i=p-1; for(int j=p;j<r;j++) { if(A[j]<=x) { i++; swap(A[i],A[j]); } } swap(A[i+1],A[r]); return i+1; } //递归调用partition,直到数组大小为1 void quickSort(vector<int> &A,int p,int r) { if(p<r) { int q=partition(A,p,r); quickSort(A,p,q-1); quickSort(A,q+1,r); } } //主函数,这里用C++里的容器vector创建待排序向量 int main() { vector<int> A{2,8,7,1,3,5,6,4}; quickSort(A,0,A.size()-1); for(auto x:A) cout<<x<<" "; }
下面给出以上代码的图片便于理解:
(图片来自CLRS 3edition chaper7 page 172)
快排的时间复杂度是nlogn
(图片来自CLRS 3edition chaper7 page 176)