快速排序的步骤:
- 从序列中选一个元素作为基准元素
- 把所有比基准元素小的元素移到基准元素左边,比基准元素大的移到基准元素右边
- 对分开来的两个区块递归进行1,2两步操作
快速排序实现代码
static void SortQuick(int[] nums, int begin, int end)
{
if (begin > end) return;
int pip = nums[begin];
int left = begin;
int right = end;
while (left < right)
{
while (nums[right] >= pip && left < right)
right--;
while (nums[left] <= pip && left < right)
left++;
if (left < right)
{
int n = nums[left];
nums[left] = nums[right];
nums[right] = n;
}
}
nums[begin] = nums[left];
nums[left] = pip;
SortQuick(nums, begin, left - 1);
SortQuick(nums, left + 1, end);
}
快速排序的优化思路
-
三数取中
取数组的开头,中间,结尾三个元素中间的值作为基准
-
小区间使用插入排序
在待排序数组长度较小时(8个)采用插入排序效率较高
-
缩小分割范围,与基准元素相同的合并在一起
每次比较时将和基准元素相同的元素放在基准元素左右来达到减少下次排序区间的目的