Written by Robert_Wang in Southwest University of Science And Technology.
快速排序是一种交换类的排序,它同样是分治法的经典体现。在一趟排序中将待排序的序列分割成两组,其中一部分记录的关键字均小于另一部分。然后分别对这两组继续进行排序,以使整个序列有序。快速排序平均时间复杂度也为O(nlogn)级。与冒泡排序不同的是,快速排序采取了用空间换取时间的原则。
#include<iostream>
using namespace std;
int a[100],n;
void quicksort(int left, int right)
{
int i,j,t,temp;
temp = a[left];
i = left;
j = right;
if(left>right) return;//这个很重要,这是递归结束的条件
while(i!=j)
{
while(a[j]>=temp && i<j) j--;
while(a[i]<=temp && i<j) i++;
if(i<j){
a[i]^=a[j];
a[j]^=a[i];
a[i]^=a[j];
}
}
a[left] = a[i];
a[i] = temp;
quicksort(left,i-1);
quicksort(i+1,right);
}
int main()
{
int i,j;
cin>>n;
for(i=1; i<=n; i++)
cin>>a[i];
quicksort(1,n);
int isFirst = 1;
for(i=1; i<=n; i++)
{
if(isFirst){
isFirst = 0;
cout<<a[i];
}
else
{
cout<<" "<<a[i];
}
}
cout<<endl;
return 0;
}