zoukankan      html  css  js  c++  java
  • 常见排序算法(下)

     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 };
  • 相关阅读:
    Flutter-动画-原理篇
    Flutter-动画-实践篇
    Flutter-动画-概念篇
    Android-textview图文混排(网络图片)
    Android--解决图片保存到相册显示1970年1月1日 8:00的问题
    Android--使用JobService实现进程保活
    Android--获取手机联系人和Sim卡联系人
    git 代码服务器的网页版gitweb的搭建
    Android 内存管理中的 Shallow heap Retained heap
    欧几里德算法----最大公约数算法
  • 原文地址:https://www.cnblogs.com/huoteng/p/5006459.html
Copyright © 2011-2022 走看看