-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnc140-排序.js
More file actions
107 lines (94 loc) · 2.05 KB
/
nc140-排序.js
File metadata and controls
107 lines (94 loc) · 2.05 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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 将给定数组排序
* @param arr int整型一维数组 待排序的数组
* @return int整型一维数组
*/
function MySort(arr) {
qs(arr, 0, arr.length - 1)
return arr.slice()
function qs(arr, start, end) {
if(start >= end) return
const p = partition(arr, start, end)
qs(arr, start, p)
qs(arr, p + 1, end)
}
function swap(arr, i, j) {
const tmp = arr[i]
arr[i] = arr[j]
arr[j] = tmp
}
function compare(a, b) {
return a - b
}
function partition(arr, start, end) {
let pivot = arr[start]
let s = start
let e = end
while(true) {
while(arr[s] < pivot) {
s++
}
while(pivot < arr[e]) {
e--
}
if(s === e) {
return s
} else if(s > e) {
return s - 1
}
swap(arr, s, e)
s++
e--
}
}
}
module.exports = {
MySort : MySort
};
// another
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 将给定数组排序
* @param arr int整型一维数组 待排序的数组
* @return int整型一维数组
*/
function MySort(arr) {
mergeSort(arr, 0, arr.length - 1)
return arr
}
function mergeSort(arr, start, end) {
if(start < end) {
const mid = start + ((end - start) >> 1)
mergeSort(arr, start, mid)
mergeSort(arr, mid + 1, end)
merge(arr, start, mid, end)
}
}
function merge(arr, start, mid, end) {
const n1 = mid - start + 1
const n2 = end - mid
const left = [], right = []
for(let i = start; i <= mid; i++) left.push(arr[i])
for(let i = mid + 1; i <= end; i++) right.push(arr[i])
let i = 0, j = 0, k = start
while(i < n1 && j < n2) {
if(left[i] <= right[j]) {
arr[k] = left[i]
i++
} else {
arr[k] = right[j]
j++
}
k++
}
while(i < n1) {
arr[k++] = left[i++]
}
while(j < n2) {
arr[k++] = right[j++]
}
}
module.exports = {
MySort : MySort
};