各類排序算法的js實現

1. 冒泡排序ui

//冒泡排序(從小到大排列)
function bubbleSort(arr){
  //一共比較length-1次
  for(var i=1, len=arr.length; i<len; i++){
      //從尾到頭(固然也能夠從頭至尾)
    for(var j=len-1; j>0; j--){
        //大的排在後面
        if(arr[j] < arr[j-1]){
              var tmp = arr[j];

            arr[j] = arr[j-1];
            arr[j-1] = tmp;
        }
    }
  }

  return arr;
}

var arr = [6,5,4,3,2,1];
console.log(arr);
console.log( bubbleSort(arr) );

 2. 雞尾酒排序 (雙向的冒泡排序)spa

//雞尾酒排序排序(從小到大排列)
function cocktailSort(arr) {
    //一共比較Math.ceil(length/2)次
    for(var i = 0, len=arr.length; i < len/2; i++) {
        //將最小值排在隊頭
        for(var j = i; j < len-i-1; j++) {
            //大換後
            if(arr[j] > arr[j+1]) {
                var temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
            console.log( "大換後(index="+j+"):"+arr.join(',') );
        }

        //將最大值排到隊尾
        for(var j = len-i-1 ; j > i; j--) {
            //小換前
            if(arr[j] < arr[j-1]) {
                var temp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = temp;
            }
            console.log( "小換前(index="+j+"):"+arr.join(',') );
        }
        console.log("第"+(i+1)+"次排序結果:"+arr.join(','));
    }

    return arr;
}

var arr = [6,5,4,3,2,1];
console.log(arr);
cocktailSort(arr);

 3. 快速排序code

//快速排序
function quickSort(arr) {
  if (arr.length < 2) { 
        return arr; 
    }

  var firstItem = arr[0]; //取第一個數做爲基準數
  var left = [];
  var right = [];
    
    //從第2個數開始,經過與基準數比較後,分紅大小兩類
  for (var i = 1; i < arr.length; i++){
        //小於基準數
    if (arr[i] < firstItem) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
    
    console.log(left.join(',')+" ("+firstItem+") "+right.join(','));

  return quickSort(left).concat([firstItem], quickSort(right));
}

var arr = [6,5,4,3,2,1,10,9,8,7];
console.log(quickSort(arr));
相關文章
相關標籤/搜索