js排序算法(一)

1. 冒泡排序算法: 即相邻的两个元素举行比较,假如前一个元素比后一个元素大,则将这两个元素换位,行将较大的元素后置。

内轮回每走一次都会将前length – i个元素中的最大元素放到length – i 的位置上。

var data = [1, 49, 30, 80, 6, 2, 18, 15, 23, 78, 16, 5, 4, 2, 34, 35, 46, 18]
function bubble(arr) {
  var length = arr.length
  for (var i = 0; i < length; i++) {
    for(var j = 0; j < length - 1 -i; j++) {
      var temp = arr[j]
      if (arr[j] > arr[j+1]) {
        arr[j] = arr[j+1]
        arr[j+1] = temp
      }
    }
  }
  console.log(arr)
}

bubble(data)

2. 挑选排序算法: 每次轮回都挑选最小值,然后将其与当前位置的值举行交换操纵即可

function select(arr) {
  var minIndex
  var temp
  for (var i = 0; i < arr.length-1; i++) {
    minIndex = i
    for(var j = i + 1; j < arr.lenght - i - 1; j++) {
      if (arr[j] < arr[minIndex]) {
        minIndex = j
      }
    }
    temp = arr[i]
    arr[i] =  arr[minIndex]
    arr[minIndex] = temp
  }
  console.log(arr)
}
select(data)

3. 插入排序: 假如前一个的值比当前值小则两者换位, 直到将这个遇见比前一个值小的数为止

function insert(arr) {
  for (var i=1; i<arr.lenght; i++) {
    var preIndex = i - 1
    var current = arr[i]
    while(preIndex >= 0 && arr[preIndex] > current) {
      arr[preIndex+1] = arr[preIndex]
      preIndex--
    }
    arr[preIndex+1] = current
  }
  console.log(arr)
}
insert(data)

4. 希尔排序: 先将arr分红arr.length/2组,个中index=1和index=length/2 + 1为一组,

假如length/2的值比较小则交换位置。反复操纵,每次都将gap的值折半比较,
直到,gap唯1的时刻排序操纵完毕。

function shell(arr) {
  function swap(array, i, k) {
    var temp = array[i]
    array[i] = array[k]
    array[k] = temp
  }
  var gap = Math.floor(arr.length / 2)
  while(gap > 0) {
    for(var i=gap; i<arr.length; i++) {
      for(var j=i; j>0; j-=gap) {
        if (arr[j-gap] > arr[j]) {
          swip(arr, j-gap, j)
        }
      }
    }
     gap = Math.floor(gap / 2)
  }
  console.log(arr)
}
shell(data)

5. 兼并排序: 经由过程递归的体式格局不停的兼并两个有序数组完成数组的排序

function mergeSort(arr) {
  var len = arr.length;
  if (len < 2) {
    return arr
  }
  var middle = Math.floor(len / 2)
  var left = arr.slice(0, middle)
  var right = arr.slice(middle)
  return merge(mergeSort(left), mergeSort(right))
}

function merge(left, right) {
    var result = [];

    while (left.length && right.length) {
        if (left[0] <= right[0]) {
            result.push(left.shift());
        } else {
            result.push(right.shift());
        }
    }

    while (left.length)
        result.push(left.shift());

    while (right.length)
        result.push(right.shift());
    return result;
}
console.log(mergeSort(data))
    原文作者:wupengyu
    原文地址: https://segmentfault.com/a/1190000008196099
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞