概要
快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
图
我的理解
快速排序快在哪里,每一次放对一个数的位置,都将该位置的前后两侧数据进行分割了,下一次的排序量就减少了。冒泡一次遍历只能找一个数,而快速排序,第一次一个,第二次2个,第三次4个,这样的快速下去。
代码
package suanFa;
import java.util.Arrays;
public class KuaiShu {
/**
* 快速排序
*
* @param arr 数组(乱序)
* @param left 数组左端下标
* @param right 数组右端下标
* @return
*/
public static int[] quickSort(int[] arr, int left, int right) {
int i, j, t, temp;
if (left > right) {
return arr;
}
System.out.println(Arrays.toString(arr));
temp = arr[left];//temp即基准数
i = left;
j = right;
while (i != j) {
//顺序很重要,先从右往左找
while (arr[j] >= temp && i < j) {
j--;
}
while (arr[i] <= temp && i < j) {
i++;
}
if (i < j) {//哨兵i与j没有相遇时
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
//基数归位
// temp = arr[left];
arr[left] = arr[i];
arr[i] = temp;
//递归
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
return arr;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};
System.out.println("排序中:");
int[] quickSort = quickSort(arr, 0, 9);
System.out.println("排序后:");
System.out.println(Arrays.toString(quickSort));
}
}
运行结果