冒泡排序,选择排序,插入排序,希尔排序

2019-07-30  本文已影响0人  肉肉肉肉_包

冒泡排序原理:比较相邻两个元素的大小,左边大于右边则交换两个元素位置(默认从小到大排序)

function bubbleSort(arr){
    for(var i=0;i<arr.length-1;i++){
      for(var j=0;j<arr.length-1-i;j++){
        if(arr[j]>arr[j+1])
          [arr[j],arr[j+1]] = [arr[j+1],arr[j]];
      }
    }
    return arr;
  }

  var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
  console.log(bubbleSort(arr));

选择排序算法原理:将未排序的数中最大(小)的挑出来放到最后,再从剩下的数按照此方法进行排序。

function selectionSort(arr){
    let minIndex;
    for(let i=0;i<arr.length-1;i++){
      minIndex = i;
      for (let j = i+1; j < arr.length-1; j++) {
        if(arr[j]<arr[minIndex])
          minIndex = j;
      }
      [arr[minIndex],arr[i]] = [arr[i],arr[minIndex]];
    }
    return arr;
  }

  var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
  console.log(selectionSort(arr));

插入排序基本原理:将元素一个个插入到已经排好序的数组里

 function insertionSort(arr){
    for(var i=1;i<arr.length;i++){    //外层循环从1开始,默认arr[0]是有序的
      //寻找元素arr[i]合适的插入位置
      for(var j=i;j>0;j--){
        if(arr[j] < arr[j-1])
          [arr[j],arr[j-1]] = [arr[j-1],arr[j]];
        else
          break;
      }
    }
    return arr;
  }
  var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
  console.log(insertionSort(arr));

希尔排序基本原理:将整个待排序的序列分成若干个子序列,在每个子序列里进行插入排序,等到整个序列基本有序时,对整个序列进行直接插入排序

 function shellSort(arr) {
    var len = arr.length,
        temp,
        gap = 1;
    while(gap < len/3) {          //动态定义间隔序列
        gap = gap*3+1;
    }
    for (gap; gap > 0; gap = Math.floor(gap/3)) {
      for (var i = gap; i < len; i++) {
        temp = arr[i];
        for (var j = i-gap; j >= 0 && arr[j] > temp; j -= gap) {
          arr[j+gap] = arr[j];
        }
        arr[j+gap] = temp;
      }
    }
    return arr;
  }
  var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
  console.log(shellSort(arr));
上一篇 下一篇

猜你喜欢

热点阅读