快速排序

Posted xiangtingsulinlin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序相关的知识,希望对你有一定的参考价值。

方法:选择一个基准元素,将小于基准元素的放左边,大于基准元素的放右边。递归调用。

基准元素可以选择中间也可以选择两边的,这并没有什么影响,因为本身就是无序的

每次递归直观感受就是使得基准元素找到自己位置不再发生改变

//array要排序的数组
//head要排序的第一个index
//tail要排序的最后一个index
private
static void quikSort(int[] array, int head, int tail) {
     //终止条件1,array==null或者为长度为0的时候直接return
//终止条件2,head和tail之间没有多余元素的时候代表已经排序完成
     
if (tail <= head || array == null || array.length <= 1) { return; }
//选择中间位置元素作为基准元素,只有有个基准元素就行,不非得去(tail+head)/2 ,head或者tail都可以
//但是目测选择中间元素,挪动的次数会少一些?这有待求证
int pvoitIndex = (tail + head) / 2;
int pvoit = array[pvoitIndex]; int start = head; int end = tail; while (start < end) {
//停止在左边第一个大于基准元素的index
while (array[start] < pvoit) { ++start; }
       //停止在右边第一个基准元素的idex
while (array[end] > pvoit) { --end; }
       //swag交换位置
if (start < end) { int tmp = array[start]; array[start] = array[end]; array[end] = tmp; ++start; --end; } else if (start == end) { ++start; } }
//递归 quikSort(array, head, end); quikSort(array, start, tail); }

 














以上是关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章

算法排序之堆排序

前端开发工具vscode如何快速生成代码片段

前端开发工具vscode如何快速生成代码片段

如何使用sublime代码片段快速输入PHP头部版本声明

代码片段如何使用CSS来快速定义多彩光标

vs2003:快速片段工具