C++:快速排序



C++:快速排序

在风口浪尖过了两天,难得今天风平浪静,解放区的天是明朗的天,我Jackill心里好喜欢……只是弄出这么大的动静,实非我所愿,希望从崩溃边缘跑回来的我……希望什么呢?GOOD LUCK吧!

要不怎么说,书到用时方恨少呢,竟然只会一种冒泡排序,赶紧翻出传说多年的数据结构一眼便像中了快速排序,简单的给个思路吧:

快速排序就好比是有一队大小不等的球,先选择一个作为标准,然后有两个人分别从开头和结尾往中间走,分别将身边的球和标准球比较,例如结尾的那个人将比自己球小的那个便扔到对方那边去,等到两个人碰头之后,再将标准球插入到两个人所占的位置,接着再对两边分别进行同样的步骤;写个代码如下:

void swap(int a[],int left,int right) //交换数组的数据;
{
int temp;
temp=a[left];
a[left]=a[right];
a[right]=temp;
}
void quicksort(int a[],int left,int right)
{
if(left>=right) return;
int pivot=(left+right)/2; //标准球为中间那个;
swap(a,pivot,right); //将标准球放到队伍最后
pivot=partition(a,left,right);//同时开始往中间走,往两边扔球;
sort(a,left,pivot-1); //递归
sort(a,pivot+1,right); //递归
}
int partition(int a[],int left,int right)
{
int i=left;
int j=right;
int temp=a[j]; //选择好的标准球
while(i!=j)
{
while((a[i]<temp)&&(i<j)) i++; //左边的球大甩到右边那
if(i<j)
{
a[j]=a[i];
j–;
}
while(a[j]>temp && i<j) j–; //比标准球小甩去左边
if(i<j)
{
a[i]=a[j];
i++;
}
}
a[i]=temp; //将标准球插入到碰面的位置,划分出两个队列来;
return i;
}

http://blog.sina.com.cn/s/blog_48db23f6010006xt.html

http://blog.csdn.net/liuchen1206/article/details/6954074