-
Notifications
You must be signed in to change notification settings - Fork 1
/
SortAnArray.java
37 lines (32 loc) · 990 Bytes
/
SortAnArray.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
/**
* <a href=https://leetcode-cn.com/problems/sort-an-array/>https://leetcode-cn.com/problems/sort-an-array/</a>
* 目前的实现方式:快速排序。
*/
public class SortAnArray {
public int[] sortArray(int[] nums) {
quickSort(nums, 0, nums.length - 1);
return nums;
}
private void quickSort(int[] nums, int start, int end) {
if (start >= end) {
return;
}
int p = partition(nums, start, end);
quickSort(nums, start, p-1);
quickSort(nums, p+1, end);
}
private int partition(int[] nums, int start, int end) {
int pivot = nums[start];
int i = start, j = end;
while (i < j) {
// from tail to head
for (; i < j && nums[j] >= pivot; j--);
nums[i] = nums[j];
// from head to tail
for (; i < j && nums[i] <= pivot; i++);
nums[j] = nums[i];
}
nums[i] = pivot;
return i;
}
}