操作
1.找到一个枢纽pivotkey ,对于一个一次操作让枢纽左边的值都小于等于pivotkey,枢纽右边的值都大于等于pivotkey
2.一个排序后将该区间分成两部分继续递归排序,直至不符合l<R;
注意对于默认枢纽为第一个元素,你也可以找到 low-high中人一个当作枢纽然后与第一个进行交换
#include<stdio.h> #include<cstring> #include<string> #include<algorithm> #include<iostream> #include<cstdlib> #include<time.h> #define INF 0x3f3f3f3f #define N 10010 using namespace std; template<typename T> void Oneqsort(T *arr,int low,int high) { if(low>=high) return; T pivotkey; int l,r; l=low; r=high; pivotkey=arr[l]; while(l<r) { while(l<r&&(!(arr[r]<pivotkey)))r--; arr[l]=arr[r]; while(l<r&&(!(pivotkey<arr[l]))) l++; arr[r]=arr[l]; } arr[r]=pivotkey; Oneqsort(arr,low,r-1); Oneqsort(arr,r+1,high); } template <typename T> void QuickSort(T *arr,int la)//数组首地址 数组长度 { Oneqsort(arr,0,la-1); } template <typename T> void Print(T* arr,int len) { for(int i=0;i<len;i++) cout<<arr[i]<<" "; cout<<endl; } int arr[N]; int main() { int n; while(~scanf("%d",&n)) { srand(time(NULL)); for(int i=0;i<n;i++) { arr[i]=rand()%1000; } Print(arr,n); printf("after......\n"); QuickSort(arr,n); Print(arr,n); } }