Skip to content

Commit 1638bd6

Browse files
committed
feat: add solutions to lc problem: No.0912
1 parent 394c28d commit 1638bd6

File tree

4 files changed

+200
-0
lines changed

4 files changed

+200
-0
lines changed

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

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,76 @@ var sortArray = function (nums) {
252252
};
253253
```
254254

255+
#### Rust
256+
257+
```rs
258+
impl Solution {
259+
pub fn sort_array(mut nums: Vec<i32>) -> Vec<i32> {
260+
let n = nums.len();
261+
Self::quick_sort(&mut nums, 0, n - 1);
262+
return nums;
263+
}
264+
265+
fn quick_sort(nums: &mut Vec<i32>, left: usize, right: usize) {
266+
if left >= right {
267+
return;
268+
}
269+
let mut i = left as i32 - 1;
270+
let mut j = right as i32 + 1;
271+
let pivot = nums[left];
272+
while i < j {
273+
loop {
274+
i += 1;
275+
if nums[i as usize] >= pivot {
276+
break;
277+
}
278+
}
279+
loop {
280+
j -= 1;
281+
if nums[j as usize] <= pivot {
282+
break;
283+
}
284+
}
285+
if i < j {
286+
nums.swap(i as usize, j as usize);
287+
}
288+
}
289+
Self::quick_sort(nums, left, j as usize);
290+
Self::quick_sort(nums, j as usize + 1, right);
291+
}
292+
}
293+
```
294+
295+
#### Kotlin
296+
297+
```kotlin
298+
class Solution {
299+
fun sortArray(nums: IntArray): IntArray {
300+
fun quickSort(left: Int, right: Int) {
301+
if (left >= right) {
302+
return
303+
}
304+
var i = left - 1
305+
var j = right + 1
306+
val pivot = nums[left]
307+
while (i < j) {
308+
while (nums[++i] < pivot) ;
309+
while (nums[--j] > pivot) ;
310+
if (i < j) {
311+
val temp = nums[i]
312+
nums[i] = nums[j]
313+
nums[j] = temp
314+
}
315+
}
316+
quickSort(left, j)
317+
quickSort(j + 1, right)
318+
}
319+
quickSort(0, nums.size - 1)
320+
return nums
321+
}
322+
}
323+
```
324+
255325
<!-- tabs:end -->
256326

257327
<!-- solution:end -->

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

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,76 @@ var sortArray = function (nums) {
247247
};
248248
```
249249

250+
#### Rust
251+
252+
```rs
253+
impl Solution {
254+
pub fn sort_array(mut nums: Vec<i32>) -> Vec<i32> {
255+
let n = nums.len();
256+
Self::quick_sort(&mut nums, 0, n - 1);
257+
return nums;
258+
}
259+
260+
fn quick_sort(nums: &mut Vec<i32>, left: usize, right: usize) {
261+
if left >= right {
262+
return;
263+
}
264+
let mut i = left as i32 - 1;
265+
let mut j = right as i32 + 1;
266+
let pivot = nums[left];
267+
while i < j {
268+
loop {
269+
i += 1;
270+
if nums[i as usize] >= pivot {
271+
break;
272+
}
273+
}
274+
loop {
275+
j -= 1;
276+
if nums[j as usize] <= pivot {
277+
break;
278+
}
279+
}
280+
if i < j {
281+
nums.swap(i as usize, j as usize);
282+
}
283+
}
284+
Self::quick_sort(nums, left, j as usize);
285+
Self::quick_sort(nums, j as usize + 1, right);
286+
}
287+
}
288+
```
289+
290+
#### Kotlin
291+
292+
```kotlin
293+
class Solution {
294+
fun sortArray(nums: IntArray): IntArray {
295+
fun quickSort(left: Int, right: Int) {
296+
if (left >= right) {
297+
return
298+
}
299+
var i = left - 1
300+
var j = right + 1
301+
val pivot = nums[left]
302+
while (i < j) {
303+
while (nums[++i] < pivot) ;
304+
while (nums[--j] > pivot) ;
305+
if (i < j) {
306+
val temp = nums[i]
307+
nums[i] = nums[j]
308+
nums[j] = temp
309+
}
310+
}
311+
quickSort(left, j)
312+
quickSort(j + 1, right)
313+
}
314+
quickSort(0, nums.size - 1)
315+
return nums
316+
}
317+
}
318+
```
319+
250320
<!-- tabs:end -->
251321

252322
<!-- solution:end -->
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
fun sortArray(nums: IntArray): IntArray {
3+
fun quickSort(left: Int, right: Int) {
4+
if (left >= right) {
5+
return
6+
}
7+
var i = left - 1
8+
var j = right + 1
9+
val pivot = nums[left]
10+
while (i < j) {
11+
while (nums[++i] < pivot) ;
12+
while (nums[--j] > pivot) ;
13+
if (i < j) {
14+
val temp = nums[i]
15+
nums[i] = nums[j]
16+
nums[j] = temp
17+
}
18+
}
19+
quickSort(left, j)
20+
quickSort(j + 1, right)
21+
}
22+
quickSort(0, nums.size - 1)
23+
return nums
24+
}
25+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
impl Solution {
2+
pub fn sort_array(mut nums: Vec<i32>) -> Vec<i32> {
3+
let n = nums.len();
4+
Self::quick_sort(&mut nums, 0, n - 1);
5+
return nums;
6+
}
7+
8+
fn quick_sort(nums: &mut Vec<i32>, left: usize, right: usize) {
9+
if left >= right {
10+
return;
11+
}
12+
let mut i = left as i32 - 1;
13+
let mut j = right as i32 + 1;
14+
let pivot = nums[left];
15+
while i < j {
16+
loop {
17+
i += 1;
18+
if nums[i as usize] >= pivot {
19+
break;
20+
}
21+
}
22+
loop {
23+
j -= 1;
24+
if nums[j as usize] <= pivot {
25+
break;
26+
}
27+
}
28+
if i < j {
29+
nums.swap(i as usize, j as usize);
30+
}
31+
}
32+
Self::quick_sort(nums, left, j as usize);
33+
Self::quick_sort(nums, j as usize + 1, right);
34+
}
35+
}

0 commit comments

Comments
 (0)