Skip to content

Commit f4ccd19

Browse files
committedSep 16, 2021
feat: add solutions to lc problem: No.0912.Sort an Array
1 parent 2e803a2 commit f4ccd19

File tree

6 files changed

+312
-38
lines changed

6 files changed

+312
-38
lines changed
 

‎solution/0900-0999/0912.Sort an Array/README.md

+109-1
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,123 @@
4646
<!-- 这里可写当前语言的特殊实现逻辑 -->
4747

4848
```python
49-
49+
class Solution:
50+
def sortArray(self, nums: List[int]) -> List[int]:
51+
def quick_sort(nums, left, right):
52+
if left >= right:
53+
return
54+
i, j = left - 1, right + 1
55+
x = nums[(left + right) >> 1]
56+
while i < j:
57+
while 1:
58+
i += 1
59+
if nums[i] >= x:
60+
break
61+
while 1:
62+
j -= 1
63+
if nums[j] <= x:
64+
break
65+
if i < j:
66+
nums[i], nums[j] = nums[j], nums[i]
67+
quick_sort(nums, left, j)
68+
quick_sort(nums, j + 1, right)
69+
70+
quick_sort(nums, 0, len(nums) - 1)
71+
return nums
5072
```
5173

5274
### **Java**
5375

5476
<!-- 这里可写当前语言的特殊实现逻辑 -->
5577

5678
```java
79+
class Solution {
80+
public int[] sortArray(int[] nums) {
81+
quickSort(nums, 0, nums.length - 1);
82+
return nums;
83+
}
84+
85+
private void quickSort(int[] nums, int left, int right) {
86+
if (left >= right) {
87+
return;
88+
}
89+
int i = left - 1, j = right + 1;
90+
int x = nums[(left + right) >> 1];
91+
while (i < j) {
92+
while (nums[++i] < x);
93+
while (nums[--j] > x);
94+
if (i < j) {
95+
int t = nums[i];
96+
nums[i] = nums[j];
97+
nums[j] = t;
98+
}
99+
}
100+
quickSort(nums, left, j);
101+
quickSort(nums, j + 1, right);
102+
}
103+
}
104+
```
105+
106+
### **C++**
107+
108+
```cpp
109+
class Solution {
110+
public:
111+
vector<int> sortArray(vector<int>& nums) {
112+
quick_sort(nums, 0, nums.size() - 1);
113+
return nums;
114+
}
115+
116+
void quick_sort(vector<int>& nums, int left, int right) {
117+
if (left >= right) return;
118+
int i = left - 1, j = right + 1;
119+
int x = nums[left + right >> 1];
120+
while (i < j)
121+
{
122+
while (nums[++i] < x);
123+
while (nums[--j] > x);
124+
if (i < j) swap(nums[i], nums[j]);
125+
}
126+
quick_sort(nums, left, j);
127+
quick_sort(nums, j + 1, right);
128+
}
129+
};
130+
```
57131
132+
### **Go**
133+
134+
```go
135+
func sortArray(nums []int) []int {
136+
quickSort(nums, 0, len(nums)-1)
137+
return nums
138+
}
139+
140+
func quickSort(nums []int, left, right int) {
141+
if left >= right {
142+
return
143+
}
144+
i, j := left-1, right+1
145+
x := nums[(left+right)>>1]
146+
for i < j {
147+
for {
148+
i++
149+
if nums[i] >= x {
150+
break
151+
}
152+
}
153+
for {
154+
j--
155+
if nums[j] <= x {
156+
break
157+
}
158+
}
159+
if i < j {
160+
nums[i], nums[j] = nums[j], nums[i]
161+
}
162+
}
163+
quickSort(nums, left, j)
164+
quickSort(nums, j+1, right)
165+
}
58166
```
59167

60168
### **...**

‎solution/0900-0999/0912.Sort an Array/README_EN.md

+109-1
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,121 @@
3030
### **Python3**
3131

3232
```python
33-
33+
class Solution:
34+
def sortArray(self, nums: List[int]) -> List[int]:
35+
def quick_sort(nums, left, right):
36+
if left >= right:
37+
return
38+
i, j = left - 1, right + 1
39+
x = nums[(left + right) >> 1]
40+
while i < j:
41+
while 1:
42+
i += 1
43+
if nums[i] >= x:
44+
break
45+
while 1:
46+
j -= 1
47+
if nums[j] <= x:
48+
break
49+
if i < j:
50+
nums[i], nums[j] = nums[j], nums[i]
51+
quick_sort(nums, left, j)
52+
quick_sort(nums, j + 1, right)
53+
54+
quick_sort(nums, 0, len(nums) - 1)
55+
return nums
3456
```
3557

3658
### **Java**
3759

3860
```java
61+
class Solution {
62+
public int[] sortArray(int[] nums) {
63+
quickSort(nums, 0, nums.length - 1);
64+
return nums;
65+
}
66+
67+
private void quickSort(int[] nums, int left, int right) {
68+
if (left >= right) {
69+
return;
70+
}
71+
int i = left - 1, j = right + 1;
72+
int x = nums[(left + right) >> 1];
73+
while (i < j) {
74+
while (nums[++i] < x);
75+
while (nums[--j] > x);
76+
if (i < j) {
77+
int t = nums[i];
78+
nums[i] = nums[j];
79+
nums[j] = t;
80+
}
81+
}
82+
quickSort(nums, left, j);
83+
quickSort(nums, j + 1, right);
84+
}
85+
}
86+
```
87+
88+
### **C++**
89+
90+
```cpp
91+
class Solution {
92+
public:
93+
vector<int> sortArray(vector<int>& nums) {
94+
quick_sort(nums, 0, nums.size() - 1);
95+
return nums;
96+
}
97+
98+
void quick_sort(vector<int>& nums, int left, int right) {
99+
if (left >= right) return;
100+
int i = left - 1, j = right + 1;
101+
int x = nums[left + right >> 1];
102+
while (i < j)
103+
{
104+
while (nums[++i] < x);
105+
while (nums[--j] > x);
106+
if (i < j) swap(nums[i], nums[j]);
107+
}
108+
quick_sort(nums, left, j);
109+
quick_sort(nums, j + 1, right);
110+
}
111+
};
112+
```
39113
114+
### **Go**
115+
116+
```go
117+
func sortArray(nums []int) []int {
118+
quickSort(nums, 0, len(nums)-1)
119+
return nums
120+
}
121+
122+
func quickSort(nums []int, left, right int) {
123+
if left >= right {
124+
return
125+
}
126+
i, j := left-1, right+1
127+
x := nums[(left+right)>>1]
128+
for i < j {
129+
for {
130+
i++
131+
if nums[i] >= x {
132+
break
133+
}
134+
}
135+
for {
136+
j--
137+
if nums[j] <= x {
138+
break
139+
}
140+
}
141+
if i < j {
142+
nums[i], nums[j] = nums[j], nums[i]
143+
}
144+
}
145+
quickSort(nums, left, j)
146+
quickSort(nums, j+1, right)
147+
}
40148
```
41149

42150
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public:
3+
vector<int> sortArray(vector<int>& nums) {
4+
quick_sort(nums, 0, nums.size() - 1);
5+
return nums;
6+
}
7+
8+
void quick_sort(vector<int>& nums, int left, int right) {
9+
if (left >= right) return;
10+
int i = left - 1, j = right + 1;
11+
int x = nums[left + right >> 1];
12+
while (i < j)
13+
{
14+
while (nums[++i] < x);
15+
while (nums[--j] > x);
16+
if (i < j) swap(nums[i], nums[j]);
17+
}
18+
quick_sort(nums, left, j);
19+
quick_sort(nums, j + 1, right);
20+
}
21+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
func sortArray(nums []int) []int {
2+
quickSort(nums, 0, len(nums)-1)
3+
return nums
4+
}
5+
6+
func quickSort(nums []int, left, right int) {
7+
if left >= right {
8+
return
9+
}
10+
i, j := left-1, right+1
11+
x := nums[(left+right)>>1]
12+
for i < j {
13+
for {
14+
i++
15+
if nums[i] >= x {
16+
break
17+
}
18+
}
19+
for {
20+
j--
21+
if nums[j] <= x {
22+
break
23+
}
24+
}
25+
if i < j {
26+
nums[i], nums[j] = nums[j], nums[i]
27+
}
28+
}
29+
quickSort(nums, left, j)
30+
quickSort(nums, j+1, right)
31+
}
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,25 @@
11
class Solution {
2-
3-
void createHeap(int[] data, int n, int h) {
4-
int i = h;
5-
int j = 2 * i + 1;
6-
int temp = data[i];
7-
8-
while (j < n) {
9-
if (j + 1 < n && data[j] < data[j + 1]) j++;
10-
if (temp > data[j]) {
11-
break;
12-
} else {
13-
data[i] = data[j];
14-
i = j;
15-
j = 2 * i + 1;
16-
}
17-
}
18-
data[i] = temp;
2+
public int[] sortArray(int[] nums) {
3+
quickSort(nums, 0, nums.length - 1);
4+
return nums;
195
}
206

21-
void initHeap(int[] data, int n) {
22-
for (int i = (n - 2) / 2; i > -1; i--) {
23-
createHeap(data, n, i);
7+
private void quickSort(int[] nums, int left, int right) {
8+
if (left >= right) {
9+
return;
2410
}
25-
}
26-
27-
void heapSort(int[] data, int n) {
28-
initHeap(data, n);
29-
30-
for (int i = n - 1;i > -1;i--) {
31-
int temp = data[i];
32-
data[i] = data[0];
33-
data[0] = temp;
34-
createHeap(data, i, 0);
11+
int i = left - 1, j = right + 1;
12+
int x = nums[(left + right) >> 1];
13+
while (i < j) {
14+
while (nums[++i] < x);
15+
while (nums[--j] > x);
16+
if (i < j) {
17+
int t = nums[i];
18+
nums[i] = nums[j];
19+
nums[j] = t;
20+
}
3521
}
22+
quickSort(nums, left, j);
23+
quickSort(nums, j + 1, right);
3624
}
37-
38-
public int[] sortArray(int[] nums) {
39-
heapSort(nums, nums.length);
40-
return nums;
41-
}
42-
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution:
2+
def sortArray(self, nums: List[int]) -> List[int]:
3+
def quick_sort(nums, left, right):
4+
if left >= right:
5+
return
6+
i, j = left - 1, right + 1
7+
x = nums[(left + right) >> 1]
8+
while i < j:
9+
while 1:
10+
i += 1
11+
if nums[i] >= x:
12+
break
13+
while 1:
14+
j -= 1
15+
if nums[j] <= x:
16+
break
17+
if i < j:
18+
nums[i], nums[j] = nums[j], nums[i]
19+
quick_sort(nums, left, j)
20+
quick_sort(nums, j + 1, right)
21+
22+
quick_sort(nums, 0, len(nums) - 1)
23+
return nums

0 commit comments

Comments
 (0)
Please sign in to comment.