快速排序

最近闲来无事,研究了几种排序算法:

一、直接插入排序

基本思想:假设前面的n-1个数已经有序,将第n个数插入到前面的n-1个数中,使之依然有序。

编码过程:依次将数组后面的数取出和前面的元素做比较,如果小于,则将其插入到目标元素的前面,然后依次将目标元素后面的元素后移。

缺点:这种排序算法在移动数据的时候会耗费很大的计算量

二、简单选择排序

基本思想:从数组中选择最小的一个与第一个数交换位置,然后第二,第三,知道最后两个相比较。

编程过程:循环遍历数组,直接交换数据位置。

缺点:需要往复循环的遍历整个数组,在数组较大的时候效率低下

三、快速排序

基本思想:取一个基准数据,然后将数组划分为两个部分,递归

编程过程:取第一个数作为基准,遍历整个数组,将数组分为两个部分,再分别对两个部分做同样的操作,直到有序。

该方法采用分而治之的办法,将数组依次拆分,效率较高,一百万的随机数采用快速排序耗时128毫秒

  public static void quickSort(int[] numbers, int start, int end){

if (start < end) {   

int base = numbers[start]; // 选定的基准值(第一个数值作为基准值)   

int temp; // 记录临时中间值   

int i = start, j = end;   

do {   

while ((numbers[i] < base) && (i < end))   

i++;   

while ((numbers[j] > base) && (j > start))   

j--;   

if (i <= j) {   

temp = numbers[i];   

numbers[i] = numbers[j];   

numbers[j] = temp;   

i++;   

j--;   

}   

} while (i <= j);   

if (start < j)   

quickSort(numbers, start, j);   

if (end > i)   

quickSort(numbers, i, end);   

}   

}

原文地址:https://www.cnblogs.com/canmeng-cn/p/6122969.html