首页 > 代码库 > 快速排序
快速排序
下面代码注释有具体解释,这里就不多说,直接上代码
#include<stdio.h>
#include<algorithm>
using namespace std;
#define maxsize 1000
int a[maxsize],n;
void quickSort(int left,int right)
{
int i,j,temp;
if(left>right)
return;
//存储基准数
temp = a[left];
i=left;
j=right;
while(i!=j)
{
//先从右往左找,这是必须的
while(a[j]>=temp && i<j)
j--;
//从左往右找
while(a[i]<=temp && i<j)
i++;
//如果没有相遇,就交换
if(i<j)
{
swap(a[i],a[j]);
}
}
//最后将第一个数与i现在的数交换,这样就将一个数的位置确定了,左边都比他小,右边都比他大
a[left]=a[i];
a[i]=temp;
//用递归的思想将左边和右边的无序序列都进行排序,每次确定一个数,当left比right大的时候全部就排序完成了
quickSort(left,i-1);
quickSort(i+1,right);
}
int main()
{
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
}
quickSort(1,n);
for(int i=1; i<=n; i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
快速排序