快排的主要思想:(假设是从小到大排列)找一个数为比较数(也叫轴)将数组中大于此比较数的放在右边,将小于此比较数的放在左边,然后递归左右两边的区域。即可。
可以分步考虑。分为三步:排序判断,划分区间,两次递归
1、排序判断
判断左下标是否小于右下标
if(left < right)
2、划分区间并返回中间位置
选择左一值为pivot,从左一开始依次判断,小于pivot,交换位置
void partition(int[] array,int left, int right)
{
int p=array[left];
int i=left,j;
for(j=left+1;j<=right;j++)
{
if(array[j]<p)
{
i++;
swap(array,i,j);
}
}
swap(array,i,left);
return i;
}
3、两次递归
递归左边区域和右边区域
quicksort(array,left,pivot-1);
quicksort(array,pivot+1,right);
完整代码
void quicksort(int[] array, int left, int right)
{
if(left<right)
{
int pivot=partition(array,left,right);
quicksort(array,left,pivot-1);
quicksort(array,pivot+1,right);
}
}
参考资料:
https://www.cnblogs.com/figure9/archive/2010/12/10/1902711.html












网友评论