zoukankan      html  css  js  c++  java
  • 8大排序算法总结 JS 实现

    //bubble sort 


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    function bubbleSort(arr,comp){
     
     
    for(var i = 0;i < arr.length; i++){
    for(var j = 0; j < arr.length - i - 1; j++){
    if(comp(arr[j],arr[j+1])){
    exch(arr,j,j+1);
    }
    }
    }
     
     
    }
     
     
    function exch(a,i,j){
    var tmp = a[i];
    a[i] = a[j];
    a[j] = tmp;
    }
     
     
    var input = new Array(5,1,4,2,3);
    bubbleSort(input,function(a,b){return a > b;});
    console.log(input);
     
     
    input = new Array(5,1,4,2,3);
    bubbleSort(input,function(a,b){return a < b;});
    console.log(input);





    //selection sort


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    function selectionSort(arr,comp){
     
     
    for(var i = 0;i < arr.length ; i++){
    for(var j = i;j < arr.length ; j++){
    if(comp(arr[i],arr[j])) { exch(arr,i,j); }
    }
    }
     
     
    }
     
     
    function exch(a,i,j){
    var t = a[i];
    a[i] = a[j];
    a[j] = t;
    }
     
     
    var input = new Array(5,1,4,2,3);
    selectionSort(input,function(a,b){return a > b;});
    console.log(input);
     
     
    input = new Array(5,1,4,2,3);
    bubbleSort(input,function(a,b){return a < b;});
    console.log(input);





    //insert sort

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    function insertSort(arr,comp){
    var result = new Array();
    for(;arr.length > 0;){
     
     
    var inserted = false;
    for(var j = 0;j < result.length; j++){
    if(comp(result[j],arr[0])) { insert(result,j,arr[0]); inserted = true; break;}
    }
    if(!inserted){insert(result,result.length,arr[0]);}
    arr.splice(0,1);
    }
    return result;
    }
     
     
    function insert(arr,i,v){
    arr.splice(i,0,v);
    }
     
     
    var input = new Array(5,1,4,2,3);
    var ret = insertSort(input,function(a,b){return a > b;});
    console.log(ret);
     
     
    var input = new Array(5,1,4,2,3);
    ret = insertSort(input,function(a,b){return a < b;});
    console.log(ret);





    //shell sort


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function shellSort (a,comp) {
        for (var h = a.length; h = parseInt(h / 2);) {
            for (var i = h; i < a.length; i++) {
                var k = a[i];
                for (var j = i; j >= h && comp(k, a[j - h]); j -= h)
                    a[j] = a[j - h];
                a[j] = k;
            }
        }
        return a;
    }
     
     
    var arr =new Array(7,9,2,5,4,1,3);
    var r = shellSort(arr,function (a,b){return a > b;});
    console.log(r);





    //merge sort 


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    function mergeS(arr,comp){
     
     
    if(arr.length == 1){return arr;}
     
     
    var mid = arr.length / 2 | 0;
    var leftArr = new Array();
    var rightArr = new Array();
    for(var i = 0;i < mid;i ++){
    leftArr.push(arr[i]);
    }
     
     
    for(var j = mid;j < arr.length; j++){
    rightArr.push(arr[j]);
    }
     
     
    console.log("before : " + leftArr + " | " + rightArr);
    var leftRet = mergeS(leftArr,comp);
    var rightRet = mergeS(rightArr,comp);
     
     
    var r = merge(leftRet,rightRet,comp);
    return r;
    }
     
     
    function merge(leftArr,rightArr,comp){
     
     
    var ret = new Array();
    var i = j = 0;
    for(;i < leftArr.length && j < rightArr.length; ){
    if(comp(leftArr[i],rightArr[j])){ret.push(leftArr[i]); i ++}
    else {ret.push(rightArr[j]); j ++}
    }
     
     
    for(;i < leftArr.length;){
    ret.push(leftArr[i]);i++;
    }
    for(;j< rightArr.length; ){
    ret.push(rightArr[j]);j++;
    }
     
     
    return ret;
     
     
    }
     
     
    var r = mergeS(new Array(0,6,5,1,2,4,3,9),function(a,b){return a > b;});
    console.log(r);





    //quick sort




    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    function quickS(arr,lo,hi,comp){
    if(lo >= hi){return ;}
     
     
    var stub = arr[lo];
     
     
    var i = lo + 1;
    var j = hi;
     
     
    for(;i < j ;){
    for(;i < j && !comp(stub,arr[j]);j--);
    for(;i < j && comp(stub,arr[i]);i++);
     
     
    if(i >= j){break;}
     
     
    var t = arr[i];
    arr[i] = arr[j];
    arr[j] = t;
     
     
    j--;
    i++;
    }
     
     
    if(comp(arr[lo],arr[i])){
    var t = arr[lo];
    arr[lo] = arr[i];
    arr[i] = t;
    }
     
     
    quickS(arr,lo,i-1,comp);
    quickS(arr,i,hi,comp);
    }
     
     
    var input = new Array(22,3,10,66,15,11,2,4,31,9);
    quickS(input, 0, input.length - 1,function(a,b){return a > b;});
    console.log(input);





    //heap sort

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    var ret = new Array();
    function heapS(arr,comp){
    if(arr.length == 0){return ;}
    var i = arr.length / 2 | 0 ;
    for(;i >= 0; i--){
    if(comp(arr[i], arr[i * 2])){exch(arr, i, i*2);}
    if(comp(arr[i], arr[i * 2 + 1])) {exch(arr, i, i*2 + 1);}
    }
    ret.push(arr[0]);
    arr.splice(0,1);
    heapS(arr,comp);
    }
     
     
    function exch(arr,i,j){
    var t = arr[i];
    arr[i] = arr[j];
    arr[j] = t;
    }
     
     
    heapS(new Array(16,22,91,0,51,44,23),function (a,b){return a > b;});
    console.log(ret);

     

  • 相关阅读:
    TreeList 树形控件 实现带三种状态的CheckBox
    SQL 左外连接,右外连接,全连接,内连接(转)
    在DataTable中进行数据查询 (转)
    uva10594 Data Flow最小费用流,两个代码区别不大(我没看出区别),为什么一个对,另一个超时!!
    SGU142 Keyword好题
    uva 10881
    南京理工1747(数论)WA了好多遍!
    CF161D 树形dp
    uva 11646(大水题几何分类)
    求a加到b二进制加法有多少次进位。
  • 原文地址:https://www.cnblogs.com/xiaochao12345/p/4171808.html
Copyright © 2011-2022 走看看