package com.sort;
/**
* 快排类
* 思路:分割和递归
* 分割:将比基准数(第一个)小的放左边,大的放右边
* 递归:快排方法下调用分割,再快排。不断递归
* @author Maggie
*
*/
public class QuickSort
{
// 递归:快排方法下调用分割,再快排,再分割,在快排,再分割....
public void sort(int[] array, int left, int right)
{
if(left < right)
{
int p = partition(array, left, right);
sort(array, left, p-1);
sort(array, p+1, right);
}
}
/**
* 第一种分割方法
* 分割:将比基准数(第一个)小的放左边,大的放右边
* @param array
* @param left
* @param right
* @return 返回分割点
*/
public int partition(int[] array, int left, int right)
{
// 设置基准数为待分割数组的第一个数
int base_num = array[left];
// 左右两端同时和基准数字比较,当左右游标相遇,表明分割完成
while(left < right)
{
// 右边:找呀找,终于在右边找到一个比基准数字
while(left < right && base_num <= array[right])
{
right--;
}
array[left] = array[right];
// 左边:找呀找,终于找到一个比基准数字大的
while(left < right && base_num >= array[left])
{
left++;
}
array[right] = array[left];
}
array[left] = base_num;
return left;
}
}
快速排序法
最新推荐文章于 2023-05-18 16:07:00 发布