-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathLeetCode-912-Sort-an-Array.java
More file actions
68 lines (54 loc) · 1.71 KB
/
LeetCode-912-Sort-an-Array.java
File metadata and controls
68 lines (54 loc) · 1.71 KB
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
61
62
63
64
65
66
67
68
class Solution {
// Quick Sort
public int[] sortArray(int[] nums) {
quickSort(nums, 0, nums.length - 1);
return nums;
}
private void quickSort(int[] nums, int lo, int hi) {
if (lo >= hi) return;
int val = partition(nums, lo, hi);
quickSort(nums, lo, val - 1);
quickSort(nums, val + 1, hi);
}
private int partition(int[] nums, int lo, int hi) {
int pivot = nums[hi];
for (int i = lo; i < hi; i++) {
if (nums[i] < pivot) {
int temp = nums[lo];
nums[lo] = nums[i];
nums[i] = temp;
lo++;
}
}
int temp = nums[lo];
nums[lo] = nums[hi];
nums[hi] = temp;
return lo;
}
// Merge Sort
public int[] sortArray(int[] nums) {
int[] temp = new int[nums.length];
mergeSort(nums, temp, 0, nums.length - 1);
return nums;
}
private void mergeSort(int[] nums, int[] temp, int lo, int hi) {
if (lo >= hi) return;
int mid = lo + (hi - lo) / 2;
mergeSort(nums, temp, lo, mid);
mergeSort(nums, temp, mid + 1, hi);
merge(nums, temp, lo, mid, hi);
}
private void merge(int[] nums, int[] temp, int lo, int mid, int hi) {
for (int k = lo; k <= hi; k++) {
temp[k] = nums[k];
}
int i = lo, j = mid + 1;
for (int k = lo; k <= hi; k++) {
if (j > hi || (i <= mid && temp[i] <= temp[j])) {
nums[k] = temp[i++];
} else {
nums[k] = temp[j++];
}
}
}
}