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 = new[] { 4, 1, 2, 7, 9, 0, 8 }; // Sorter.QuickSort(list, 0, 7);