#include<iostream>
using namespace std;
void quick_sort(int *num,int l,int r)
{
int i=l,j=r,mid=num[(l+r)/2];
while(i<=j)
{
while(num[i]<mid) i++;
while(num[j]>mid) j--;
if(i<=j)
{
int temp=num[j];
num[j]=num[i];
num[i]=temp;
i++;
j--;
}
}
if(i<r) quick_sort(num,l,i);
if(j>l) quick_sort(num,j,r);
}
int main()
{
int n,num[100];
cin>>n;
if(n<=0) return 0;
for(int i=0;i<n;i++)
cin>>num[i];
quick_sort(num,0,n-1);//注意这个地方的n-1
for(int i=0;i<n;i++) cout<<num[i]<<" ";
system("pause");
return 0;
}
最简单的快排,原理:
1.找到一个参照元素,将数组分为比他小的左部分和比他大的右部分两个子数组(分的时候,简单以参照元素对中心左右调换)
2.开始递归,不断将子数组分为左部分和右部分,最终每部分只含有一个元素,此时数组已经有序。