@@ -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