@@ -56,3 +56,85 @@ var partition = function(nums, left, right){
56
56
}
57
57
```
58
58
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