1.概述
快速排序(Quick sort) 原理:
选取一个基数,通过一次扫描将要排序的数据分割成两部分,其中一部分所有数据都比这个基数小,另外一部分所有数据都不小于这个基数,然后按照此方法进行递归,已达到排序。
方法步骤:
- 设定要排序的起始和结束位置
- 选一个基数,一般直接选这个起始和结束坐标的中间坐标
- 已这个基数为准,循环遍历集合,从起始坐标开始,把大于基数的放在基数的右边,从结束坐标开始查找,把小于基数的放在基数的左边。
- 一次排序后,左边的数据都小于基数,右边的都大于基数,再重新开始上面的步骤1,2,3
2.示例
public static void QuickSort(int[] nums, int left, int right) {
if (left < right) {
int i = left;
int j = right - 1;
int middle = nums[(left + right) / 2];// 中间基数
while (true) {
while (i < right && nums[i] < middle)// 从左边开始搜索第一不小于基数的值,放到右边
{
i++;
}
while (j > 0 && nums[j] > middle)// 从右边开始搜索第一个小于基数的值,放到左边
{
j--;
}
if (i == j)
break;
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
if (nums[i] == nums[j])
j--;
}
QuickSort(nums, left, i);
QuickSort(nums, i + 1, right);
}
}
// int[] list = { 4, 1, 2, 7, 9, 0, 8 };
// Quick.QuickSort(list, 0, 7);