本文共 1575 字,大约阅读时间需要 5 分钟。
快速排序的思路很简单,它的思想就是分治和递归,归并排序也使用的是分治算法。
1、把待排序数组的起始值作为为基准值,
2、从数组下标为1开始的一段数组,使用头尾两个指针,然后先从尾部(这个顺序不能错,不能从头部开始)寻找第一个比基准值小的数,然后交换位置(实际上使用的时候,并不是交换位置,只是把与基准值比较的那个元素挪一下位置,基准值等到最后的时候放到最后的位置即可。结束条件是:头尾指针不发生反向。这样一次过程基准值就放到了它排完序的最终位置。
3、对基准值左右两边递归使用快速排序。
这个算法实现起来比归并排序要简单。
package Sort;public class QuickSort { /** * 快速排序 * @param array 待排序数组 * @param start 由于是递归函数,所以函数的参数不能那么任性,得设计好,这是待排序数组的起始下标 * @param end 待排序数组的终止下标 */ public static void quickSort(int[] array,int start,int end){ if(start >= end || end > array.length - 1){//保证了至少有两个元素 return; } int baseValue = array[start]; int baseIndex = start; int head = start + 1, tail = end; while(head <= tail) { while (head <= tail && array[tail] >= baseValue) { tail--; } if(head > tail){ break; }else{ array[baseIndex] = array[tail]; baseIndex = tail; } while(head <= tail && array[head] <= baseValue){ head++; } if(head > tail){ break; }else{ array[baseIndex] = array[head]; baseIndex = head; } } array[baseIndex] = baseValue; quickSort(array,start,baseIndex-1); quickSort(array,baseIndex+1,end); } public static void main(String[] args){ int[] array = {1,9,89,2,12,323,122,57782,28,99,12,2,1212}; quickSort(array,0,array.length - 1); ArrayPrint.arrayPrint(array); }}
转载地址:http://tizji.baihongyu.com/