转圈圈

javascript 排序算法

目录:

  1. 冒泡排序
  2. 选择排序
  3. 插入排序
  4. 快速排序

冒泡排序算法

 function sort_bubble(arr,fn) {
   let length = arr.length;
   for(let x = 0; x < length; x ++) {
     for (let y = x + 1; y < length; y ++) {
       [arr[x],arr[y]] = fn(arr[x],arr[y])?[arr[y],arr[x]]:[arr[x],arr[y]]; 
     }
   }
   return arr;
 } 

// 交换数组位置
function swap(a,b) {
 return  [a,b] = [b,a];
}

 function ascending(x,y) {
   return x > y;
 }
 function desending(x,y) {
   return x < y;
 }

选择排序

/**
 * @param {array} array 传入要排序的数组
 */
function selectionSort(array) {

  const len = array.length;

  for (let i = 0; i < len; i++) {

    let minIndex = i;

    for (let j = i + 1; j < len; j++) {

      if (array[j] < array[minIndex]) {

        minIndex = j;
      }
    }
    // 最小元素已经是第一个就不用交换
    if( i !== minIndex) {
      // let tmp = array[i];
      // array[i] = array[minIndex];
      // array[minIndex] = tmp ;

      [array[i],array[minIndex]] = [array[minIndex],array[i]];
    }
  }
  return array;
}

插入排序



function insertionSort(myArray) {

    var len = myArray.length,     // 数组的长度
        value,                      // 当前比较的值
        i,                          // 未排序部分的当前位置
        j;                          // 已排序部分的当前位置
    
    for (i=0; i < len; i++) {
    
        // 储存当前位置的值
        value = myArray[i];
        
        /*
         * 当已排序部分的当前元素大于value,
         * 就将当前元素向后移一位,再将前一位与value比较
         */
        for (j=i-1; j > -1 && myArray[j] > value; j--) {
            myArray[j+1] = myArray[j];
        }

        myArray[j+1] = value;
    }
    
    return myArray;
}

快速排序

function quickSort(arr) {

    if (arr.length <= 1) { return arr; }
  
    var pivotIndex = Math.floor(arr.length / 2);
  
    var pivot = arr.splice(pivotIndex, 1)[0];
  
    var left = [];
  
    var right = [];
  
    for (var i = 0; i < arr.length; i++){
  
      if (arr[i] < pivot) {
  
        left.push(arr[i]);
  
      } else {
  
        right.push(arr[i]);
  
      }
  
    }
  
    return quickSort(left).concat([pivot], quickSort(right));
  
  };

参考:

posted @ 2019-05-03 22:47  rosendolu  阅读(181)  评论(0编辑  收藏  举报