码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序

时间:2018-07-20 19:01:07      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:pre   start   []   class   index   选择   ide   head   ||   

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

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

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

//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); }

 

快速排序

标签:pre   start   []   class   index   选择   ide   head   ||   

原文地址:https://www.cnblogs.com/xiangtingsulinlin/p/9343035.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!