-
Notifications
You must be signed in to change notification settings - Fork 10
/
QuickSort.java
60 lines (58 loc) · 1.76 KB
/
QuickSort.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package com.camnter.basicexercises.sorting;
/**
* 快速排序
*
* @author CaMnter
*/
public class QuickSort {
public <T extends Comparable<T>> void quickSorting(T[] array, int left, int right) {
int r, l;
if (left > right) return;
// 基准数
T temp = array[left];
l = left;
r = right;
while (l != r) {
/**
* 要先从右往左找
* 如果比基准数大,就一直找下去,直到找到比基准数小的
*/
while ((array[r].compareTo(temp) >= 0) && l < r) r--;
/**
* 要先从左往右找
* 如果比基准数小,就一直找下去,直到找到比基准数大的
*/
while ((array[l].compareTo(temp) <= 0) && l < r) l++;
if (l < r) {
/**
* 交换
*/
T t = array[l];
array[l] = array[r];
array[r] = t;
}
}
/**
* 基准数与中间位置的数字交换
*/
array[left] = array[l];
array[l] = temp;
/**
* 继续处理左边的,这里是一个递归的过程
*/
quickSorting(array, left, l - 1);
/**
* 继续处理右边的,这里是一个递归的过程
*/
quickSorting(array, l + 1, right);
}
public static void main(String args[]) {
Integer[] object = {26, 19, 7, 37, 27, 57, 67, 99, 87, 17};
QuickSort quickSorting = new QuickSort();
quickSorting.quickSorting(object, 0, object.length - 1);
System.out.println("\n快速排序\n");
for (int i : object) {
System.out.print(i + " ");
}
}
}