思路:
1.找到一个数(以第一个数为例)作为关键数key
2.令i=数列的左端,j=数列的右端
3.j往前搜索,直到找到小于key的数,a[i]与a[j]互换
4.i往后搜索,直到找到大于key的数,a[i]与a[j]互换
5.令a[i]=key找到key的位置
6.运用递归,把key左边与右边的两个数组分别重复上述步骤
代码如下:
#include<iostream>
using namespace std;
#define maxn 100
int a[maxn];
void quicksort(int low,int high)
{
if(low>=high) //当左边等于右边时,结束
return;
int first=low,last=high;
int key=a[first];
while(first<last)
{
while(first<last&&a[last]>=key)
last--;
a[first]=a[last];
while(first<last&&a[first]<=key)
first++;
a[last]=a[first];
}
a[first]=key;
quicksort(first+1,high);
quicksort(low,first-1);
}
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;
}