快速排序是一个常用的排序算法,快速排序被认为是在所有同数量级的排序方法中,平均性能最好
算法概述/思路
快速排序一般基于递归、二分实现。其思路是这样的:
1.选定一个合适的值(理想情况中值最好,但实现中一般使用数组第一个值),称为“枢轴”(pivot)。
2.基于这个值,将数组分为两部分,较小的分在左边,较大的分在右边。
3.可以肯定,如此一轮下来,这个枢轴的位置一定在最终位置上。
4.对两个子数组分别重复上述过程,直到每个数组只有一个元素。
5.排序完成。
注:
快速排序并不是稳定的。这是因为我们无法保证相等的数据按顺序被扫描到和按顺序存放。
#include<bits/stdc++.h>
using namespace std;
int a[100005];
void quicksort(int left,int right)
{
int i,j,base;
i=left; j=right;
base=a[(i+j)/2];
while (i<=j){
while (a[i]<base) i++;
while (a[j]>base) j--;
if (i<=j){
int t=a[i]; a[i]=a[j];a[j]=t;
i++;
j--;
}
}
if (left<j) quicksort(left,j);
if (i<right) quicksort(i,right);
}
int main()
{
int n;
cin>>n;
for (int i=0;i<n;i++) cin>>a[i];
quicksort(0,n-1);
for (int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}