快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法
该方法的基本思想是:
1.先从数列中取出一个数作为基准数 base。
2.左右同时往中间遍历,找到所有左边比base大的数与右边小于或等于base的数值进行位置互换,直到左边和右边index相同本次遍历结束,并将index中的数字与base交互。
3.再对index左右区间重复第二步,直到各区间只有一个数。
public class QuickDemo {
public static void main(String[] args) {
int[] a = {1, 2, 5, 7, 9, 3, 0, 4};
quickSort(a);
for (int i : a) {
System.out.println(i);
}
}
public static void quickSort(int[] a) {
quickSort(a, 0, a.length - 1);
}
public static void quickSort(int[] a, int left, int right) {
if (left > right) {//退出递归
return;
}
//设置基准数字 和左右两边起点
int base = a[left];
int i = left;
int j = right;
while (i != j) {
while (a[i] <= base && i < j) {
i++;
}
while (a[j] >= base && j > i) {
j--;
}
if (i < j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = base;
quickSort(a, left, right- 1);
quickSort(a, i + 1, right);
}
}
网友评论