-
基本思想
通过一趟排序,将数据分割成独立的两个部分,其中一部分的数据要比另一部分的数据都要小,然后在按此方法将这两部分的数据分别进行快速排序。 -
排序流程
首先设定一个分界值,通过该分界值将数据分成两个部分;
将大于或等于该临界值的数据都放到数组右边,小于分界值的数据放到数组的左边;
然后左边和右边的数据可以独立排序,重复上述步骤直到排序结束。 -
代码实现
public class Qsort {
public static void main(String[] args) {
int arr[] = new int[] { 3, 3, 3, 7, 9, 122344, 4656, 34, 34, 4656, 5,
6, 7, 8, 9, 343, 57765, 23, 12321 };
int len =arr.length-1;
qsort(arr, 0, len);
for (int i : arr) {
System.out.println(i);
}
}
public static int[] qsort(int arr[], int start, int end) {
int pivot = arr[start];
int i = start;
int j = end;
while (i < j) {
while (i < j && arr[j] > pivot) {
j--;
}
while (i < j && arr[i] < pivot) {
i++;
}
if (arr[i] == arr[j] && i < j) {
i++;
} else {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
if (i - 1 > start) {
arr = qsort(arr, start, i - 1);
}
if (j + 1 < end) {
arr = qsort(arr, j + 1, end);
}
return arr;
}
}