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); //递归
}
void quicksort(int a[],int left,int 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