• 几种典型的排序算法


      1 // 冒泡排序
      2     function swap(myArr, a, b) {
      3         var temp = myArr[a];
      4         myArr[a] = myArr[b];
      5         myArr[b] = temp;
      6     }
      7     function bubbleSort(myArr) {
      8         var len = myArr.length,
      9                 i, j,stop;
     10         for (i = 0; i < len; i++) {
     11             for (j = 0, stop = len - 1 - i; j < stop; j++) {
     12                 if (myArr[j] > myArr[j + 1]) {
     13                     swap(myArr, myArr[j], myArr[j + 1]);
     14                 }
     15             }
     16         }
     17         return myArr;
     18     }
     19 
     20     // 选择排序
     21     function selectionSort(myArr) {
     22         var len = myArr.length,
     23                 min;
     24         for (var i = 0; i < len; i++) {
     25             // 将当前值设为最小值
     26             min = i;
     27             // 检查数组其余部分是否更小
     28             for (var j = i + 1; j < len; j++) {
     29                 if (myArr[j] < myArr[min]) {
     30                     min = j;
     31                 }
     32             }
     33 
     34             // 如果当前位置不是最小值,将其替换为最小值
     35             if (i != min) {
     36                 swap(myArr, i, min);
     37             }
     38         }
     39         return myArr;
     40     }
     41 
     42     // 插入排序
     43     function insertionSort(myArr) {
     44         var len = myArr.length,
     45                 value, // 当前比较的值
     46                 i, // 未排序部分的当前位置
     47                 j; // 已排序部分的当前位置
     48         for (i = 0; i < len; i++) {
     49             // 储存当前位置的值
     50             value = myArr[i];
     51             // 当已排序部分的当前元素大于value,
     52             // 就将当前元素后移一位,再将前一位与value比较
     53             for (j = i - 1; j > -1 && myArr[j] > value; j++) {
     54                 myArr[j + 1] = myArr[j];
     55             }
     56             myArr[j + 1] = value;
     57         }
     58         return myArr;
     59     }
     60 
     61     // 合并排序
     62     function merge(left, right) {
     63         var result = [],
     64                 il,
     65                 ir;
     66         while (il < left.length && ir < right.length) {
     67             if (left[il] < right[ir]) {
     68                 result.push(left[il++]);
     69             } else {
     70                 result.push(right[ir++]);
     71             }
     72         }
     73         return result.concat(left.slice(il)).concat(right.slice(ir));
     74     }
     75 
     76     function mergeSort(myArr) {
     77         if (myArr.length < 2) {return myArr;}
     78 
     79         var middle = Math.floor(myArr.length / 2),
     80                 left = myArr.slice(0, middle),
     81                 right = myArr.slice(middle),
     82                 params = merge(mergeSort(left), mergeSort(right));
     83 
     84         // 在返回的数组头部添加0和数组长度两个元素
     85         params.unshift(0, myArr.length);
     86 
     87         // 讲原来的数组替换为排序后的数组
     88         myArr.splice.apply(myArr, params);
     89 
     90         return myArr;
     91     }
     92 
     93     // 快速排序
     94     function swapN(myArr, firstIndex, secondIndex) {
     95         var temp = myArr[firstIndex];
     96         myArr[firstIndex] = myArr[secondIndex];
     97         myArr[secondIndex] = temp;
     98     }
     99 
    100     function patition(myArr, left, right) {
    101         var pivot = myArr[Math.floor((left + right) / 2)],
    102                 i = left,
    103                 j = right;
    104         while (i <= j) {
    105             while (myArr[i] < pivot) {
    106                 i++;
    107             }
    108             while (myArr[j] > pivot) {
    109                 j--;
    110             }
    111             if (i <= j) {
    112                 swapN(myArr, i, j);
    113                 i++;
    114                 j++;
    115             }
    116         }
    117         return i;
    118     }
    119 
    120     function quickSort(myArr, left, right) {
    121         if (myArr.length < 2) return myArr;
    122 
    123         left = (typeof left !== 'number' ? 0 : left);
    124         right = (typeof right !== 'number' ? myArr.length - 1 : right);
    125 
    126         var index = patition(myArr, left, right);
    127 
    128         if (left < index - 1) {
    129             quickSort(myArr, left, index - 1);
    130         }
    131         if (index < right) {
    132             quickSort(myArr, index, right);
    133         }
    134         return myArr;
    135     }

    摘自阮一峰老师网站。

  • 相关阅读:
    不常用函数总结
    高效update方案
    一次http完整的请求tcp报文分析
    类的初始化以及创建对象后的初始化
    [置顶] 编译背后的秘密
    html object元素
    JQuery初识
    Java多线程yield
    智能电视TV开发---直播视频客户端结构设计和实现
    以Android环境为例的多线程学习笔记(二)-----------------锁和条件机制
  • 原文地址:https://www.cnblogs.com/xiaoweiy/p/5550549.html
Copyright © 2020-2023  润新知