说明:代码来自传智播客某讲师
快速排序:又称双冒泡排序,首先选定一个轴,主要思想是,将大于的轴的数移到轴的右边,把小于轴的数移到轴的左边,然后递归对子序列重复操作。
#include<iostream>
using namespace std;
void change(int &x,int &y)
{
int tmp;
tmp=x;
x=y;
y=tmp;
}
void quickSort(int a[],int left,int right)
{
int i=left;//a[0]最左边的数(轴)
int j=right+1;//a[10]最右边的数的后面(不存在的)
if(i<j)
{
do
{
do
{
i++;
}while(a[i]<a[left]&&i<=right);//right表示最后一个,可以等于
do
{
j--;
}while(a[j]>=a[left]&&j>left);//这里的left到轴了,不能等于
if(i<j)
{
change(a[i],a[j]);
}
}while(i<j);//j作为分界点(不能用i)
change(a[left],a[j]);//此时j<i了,j指向的数小于轴,而i指向的数大于轴。为了保证顺序,j为分界点,交换a[j]
quickSort(a,left,j-1);
qucikSort(a,j+1,right);
}
}
int main()
{
int a[]={4,5,1,3,2,0,-3,-20,100,50};
quickSort(a,0,10-1);
int i;
for(i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}