操作
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......
");
QuickSort(arr,n);
Print(arr,n);
}
}