Java 快速排序
思路
通过一趟排序将无序数组划分成独立的两部分,其中一部分的所有元素比另外一部分的所有元素都要小,然后再按此方法对这两部分元素分别进行快速排序,整个排序过程可以递归进行,以此达到整个无序数组变成有序数组的目的。
快速排序主要分为以下步骤:
-
从无序数组中取出一个元素作为基准元素;
-
划分数组过程中,将比基准元素大的元素全部划分到它的右边,小于或等于它的元素全部划分到它的左边;
-
重复步骤(1)和(2),直到各划分数组的长度为1。
代码
public void sort(int[] arr, int low, int high) {
int i = 0, j = 0, k = 0;
if (low < high) {
i = low;
j = high;
k = arr[i];
while (i < j) {
// 从右向左找第一个小于arr[i]的元素
while (i < j && arr[j] > k) {
j--;
}
if (i < j) {
arr[i++] = arr[j];
}
// 从左向右找第一个大于arr[i]的元素
while (i < j && arr[i] <= k) {
i++;
}
if (i < j) {
arr[j--] = arr[i];
}
}
arr[i] = k;
}
sort(arr, low, i - 1);
sort(arr, i + 1, high);
}