Skip to content

Commit 2897d74

Browse files
committed
add heapSort mergeSort
1 parent d5b9065 commit 2897d74

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

基础算法篇/排序算法.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,85 @@ var partition = function(nums, left, right){
5656
}
5757
```
5858

59+
#### 归并排序
60+
61+
```js
62+
var mergeSort = function (nums, start, end) {
63+
if (start < end) {
64+
let mid = (start + end) >> 1;
65+
mergeSort(nums, start, mid);
66+
mergeSort(nums, mid + 1, end);
67+
nums = merge(nums, start, mid, end);
68+
}
69+
return nums;
70+
}
71+
72+
var merge = function (nums, left, mid, right) {
73+
let arr = [];
74+
let i = left, j = mid + 1;
75+
while (i <= mid && j <= right) {
76+
if (nums[i] < nums[j]) {
77+
arr.push(nums[i]);
78+
i++;
79+
} else {
80+
arr.push(nums[j]);
81+
j++;
82+
}
83+
}
84+
while (i <= mid) {
85+
arr.push(nums[i++]);
86+
}
87+
while (j <= right) {
88+
arr.push(nums[j++]);
89+
}
90+
return arr;
91+
}
92+
93+
let nums = [2, 3, 5, 9, 4, 6, 8];
94+
console.log(mergeSort(nums,0,nums.length-1))
95+
```
96+
97+
#### 堆排序
98+
99+
用数组表示的完美二叉树 complete binary tree
100+
101+
[动画展示](https://www.bilibili.com/video/av18980178/)
102+
103+
```js
104+
var move = function (nums, low, high) {
105+
let i = low, j = 2 * i + 1;
106+
let temp = nums[i];
107+
while (j <= high) {
108+
if (j < high && nums[j] < nums[j + 1]) {
109+
j++;
110+
}
111+
if (temp < nums[j]) {
112+
nums[i] = nums[j];
113+
i = j;
114+
j = 2 * i + 1;
115+
} else {
116+
break;
117+
}
118+
}
119+
nums[i] = temp;
120+
}
121+
122+
var heapSort = function (nums) {
123+
let i, temp;
124+
let n = nums.length - 1;
125+
for (i = n >> 1; i >= 0; i--) {
126+
move(nums, i, n);
127+
}
128+
for (i = n; i >= 1; i--) {
129+
temp = nums[0];
130+
nums[0] = nums[i];
131+
nums[i] = temp;
132+
move(nums, 0, i - 1);
133+
}
134+
return nums;
135+
}
136+
137+
let arr = [2,4,1,5,8,6,7,9]
138+
console.log(heapSort(arr))
139+
```
140+

0 commit comments

Comments
 (0)