美文网首页
js 排序方法

js 排序方法

作者: 躺在家里干活 | 来源:发表于2019-10-24 13:48 被阅读0次

冒泡排序

相邻两个对比,小的在前,

function bubbleSort(arr) {
  for (var outer = arr.length - 1; outer > 0; outer--) {
    var isSort = true;
    for (var inner = 0; inner < outer; inner++) {
      if (arr[inner] > arr[inner + 1]) {
        var temp = arr[inner];
        arr[inner] = arr[inner + 1];
        arr[inner + 1] = temp;
        isSort = false
      }
    }
    if (isSort) {
      break;
    }
  }
}

选择排序

从第一个开始找到最小的放最前面,依次

function selectionSort(arr) {
  var min = 0;
  for (var outer = 0; outer < arr.length - 1; outer++) {
    min = outer;
    for (var inner = outer + 1; inner < arr.length; inner++) {
      if (arr[min] > arr[inner]) {
        min = inner
      }
    }
    var temp = arr[outer];
    arr[outer] = arr[min];
    arr[min] = temp;
  }
}

插入排序

从第二个开始,和前面的对比,比前面小就换位置,不小就不动,依次

function insertSort(arr) {
  for (var outer = 1; outer < arr.length; outer++) {
    var temp = arr[outer];
    var inner = outer - 1
    while (inner >= 0 && temp < arr[inner]) {
      arr[inner + 1] = arr[inner];
      --inner;
    }
    arr[inner + 1] = temp
  }
}

硬编码间隔希尔排序

function shellSort(arr) {
  let gaps = [5, 3, 1]; //希尔排序间隔
  for (var g = 0; g < gaps.length; g++) {
    for (var i = gaps[g]; i < arr.length; i++) {
      var temp = arr[i];
      for (var j = i; j >= gaps[g] && arr[j - gaps[g]] > temp; j -= gaps[g]) {
        arr[j] = arr[j - gaps[g]]
      }
      arr[j] = temp
    }
  }
}

动态间隔序列希尔排序

function shellsort(arr) {
  var h = 1;
  while (h < arr.length / 3) {
    h = h * 3 + 1
  }
  while (h >= 1) {
    for (var i = h; i < arr.length; i++) {
      var temp = arr[i];
      for (var j = i; j >= h && arr[j - h] > temp; j -= h) {
        arr[j] = arr[j - h]
      }
      arr[j] = temp
    }
    h = (h - 1) / 3
  }
}

快速排序

通过第一个值将数组分为两个数组,大于该值的放在后面,小于该值的放在前面(利用递归)

function qSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }
  var left = [];
  var right = [];
  var pivot = arr[0];
  for (var i = 1; i < arr.length; i++) {
    if (arr[i] > pivot) {
      right.push(arr[i])
    } else {
      left.push(arr[i])
    }
  }
  return qSort(left).concat(pivot, qSort(right))
}

归并排序

function merge(left, right) {
  var result = [];
  while (left.length > 0 && right.length > 0) {
    if (left[0] > right[0]) {
      result.push(right.shift())
    } else {
      result.push(left.shift())
    }
  }
  return result.concat(left, right)
}

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

个人博客

相关文章

  • js 排序方法

    冒泡排序 相邻两个对比,小的在前, 选择排序 从第一个开始找到最小的放最前面,依次 插入排序 从第二个开始,和前面...

  • 2019-03-22

    js字符串转译为unicode的方法: unicode解码方法 js对象(object)变成url的形式 列表的排序

  • js手写数组排序

    一. js的sort()方法 sort() 方法用于对数组的元素进行排序,同时需要一个额外的排序函数sortNum...

  • js中的数组对象排序

    一、普通数组排序 js中用方法sort()为数组排序。sort()方法有一个可选参数,是用来确定元素顺序的函...

  • js中的数组对象排序(存稿)

    一、普通数组排序 js中用方法sort()为数组排序。sort()方法有一个可选参数,是用来确定元素顺序的函...

  • 6.数组排序

    一、普通数组排序 js中用方法sort()为数组排序。sort()方法有一个可选参数,是用来确定元素顺序的函数。如...

  • ts 数组排序

    一、普通数组排序 js中用方法sort()为数组排序。sort()方法有一个可选参数,是用来确定元素顺序的函数。如...

  • JavaScript学习--数组排序以及最大值、最小值问题

    1.数字排序在js中默认是使用 sort() 函数按照字符串顺序对值进行排序。但是,sort() 方法在对数值排序...

  • jS ASCII 排序方法

  • js sort原理

    js提供了sort方法,方便对数组进行排序,然而不同引擎对js的sort方法解析可能存在差异。本文基于v8引擎进行...

网友评论

      本文标题:js 排序方法

      本文链接:https://www.haomeiwen.com/subject/jugrvctx.html