C++實現快排函式
阿新 • • 發佈:2018-12-24
技巧:
對於每一段區間[l,r],取一個key值為a[l],接下來要將這個key值放到一個位置上使得當前它的左邊的數都比它小,右邊的數都比它大。存在一個交換操作;具體看程式碼
程式碼:
#include <iostream> #include <cstdio> using namespace std; template <typename T> void Qsort(T *a,int left,int right){ int l = left,r=right; if(l>=r) return ; T key = a[l]; while(l<r){ while(a[r]>=key && l<r) r--;//找到當前右邊第一個比key小的值 a[l] = a[r];//將這個比key小的值賦值給當前a[l],使得key值左邊都比key小 while(a[l]<=key && l<r) l++;//找到當前左邊第一個比key大的值 a[r] = a[l];//將這個比key大的值賦值給當前a[r],使得key值右邊都比key大 } a[l] = key;//將key值賦值給臨界點l||r //當前的l左邊都比key小,右邊都比key大 只需要更新[left,l-1]和[l+1,right] Qsort(a,left,l-1); Qsort(a,l+1,right); } int n; int main(){ int a[10]; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); Qsort(a,1,n); printf("n=%d\n",n); for(int i=1;i<=n;i++) printf("%d ",a[i]); printf("\n"); }