常见排序算法(下)

 1 //5. 希尔排序
 2 var shellSort = function(arr) {
 3     var len = arr.length;
 4     for (var gap = Math.floor(len / 2); gap > 0; gap = Math.floor(gap / 2)) {
 5         for (var i = gap; i < len; i++) {
 6             var temp = arr[i],
 7                 j = i - gap;
 8             while (temp < arr[j] && j > -1) {
 9                 arr[j + gap] = arr[j];
10                 j -= gap;
11             }
12             arr[j + gap] = temp;
13         }
14     }
15     return arr;
16 };
17 
18 //6. 归并排序
19 function mergeSort(source, dest, s, t) {
20     var m, dest2 = new Array();
21     if (s == t) {
22         dest[s] = source[s];
23     } else {
24         m = Math.floor((s + t) / 2);
25         mergeSort(source, dest2, s, m);
26         mergeSort(source, dest2, m + 1, t);
27         merge(dest2, dest, s, m, t);
28     }
29 }
30 
31 function merge(source, dest, s, m, n) {
32     for (var i = m + 1, k = s; i <= n && s <= m; k++) {
33         if (source[s] < source[i]) {
34             dest[k] = source[s++];
35         } else {
36             dest[k] = source[i++];
37         }
38     }
39 
40     if (s <= m) {
41         for (var l = 0; l <= m - s; l++) {
42             dest[k + l] = source[s + l];
43         }
44     }
45     if (i<= n) {
46         for (var l = 0; l <= n - i; l++) {
47             dest[k + l] = source[i + l];
48         }
49 
50     }
51 }
52 
53 //7. 堆排序
54 var heapSort = function(arr) {
55     var temp, len = arr.length;
56     for (var i = Math.floor(len / 2); i >= 0; i--) {
57         heapAdjust(arr, i, len - 1);
58     }
59     for (var i = len - 1; i >= 0; i--) {
60         arraySwap(arr, 0, i);
61         heapAdjust(arr, 0, i - 1);
62     }
63     return arr;
64 };
65 
66 var heapAdjust = function(arr, start, max) {
67     var temp = arr[start];
68     for (var i = 2 * start; i < max; i *= 2) {
69         if (i < max && arr[i] < arr[i + 1]) {
70             ++i;
71         }
72         if (temp >= arr[i]) {
73             break;
74         }
75         arr[start] = arr[i];
76         start = i;
77     }
78     arr[start] = temp;
79 };

 

posted @ 2015-11-30 10:27  将军喊俺哥  阅读(167)  评论(0编辑  收藏  举报