Js数组排序

js排序

var arr = [6,89,76,35,27,8,4,0,34,67]

1、sort排序

arr.sort(function(a, b){return a-b})

//sort 没有参数时,将按字母顺序对数组中的元素进行排序,(按照字符编码的顺序进行排序)。
//参数为一个function,a-b 为小到大, b-a 为大到小

2、冒泡排序

原理:从第一个元素开始,把当前元素和下一个元素进行比较。如果当前元素大,那么就交换位置,重复操作直到比较到最后一个元素

  function maopao(arr) {
    for (let i = 0; i < arr.length; i++) {
      for (let j = i + 1; j < arr.length; j++) {
        if (arr[i] > arr[j]) {
          let temp = arr[j];
          arr[j] = arr[i];
          arr[i] = temp;
        }
      }
    }
  }

插入排序:

原理:第一个元素默认是已排序元素,取出下一个元素和当前元素比较,如果当前元素大就交换位置。那么此时第一个元素就是当前的最小数,所以下次取出操作从第三个元素开始,向前对比,重复之前的操作  
//for循环
  function chaRu(arr) {
    for (var i = 1; i < arr.length; i++) {
      let current = arr[i];
      for (var preIndex = i - 1; preIndex >= 0; preIndex--) {
        if (arr[preIndex] > arr[preIndex + 1]) {
          arr[preIndex + 1] = arr[preIndex]
          arr[preIndex] = current;
        } else {
          break;
        }
      }
    }
  }

//while循环
  function insertSort(arr) {
      if (Array.isArray(arr)) {
        for (var i = 1; i < arr.length; i++) {
          var preIndex = i - 1;
          var current = arr[i]
          while (preIndex >= 0 && arr[preIndex] > c) {
            arr[preIndex + 1] = arr[preIndex];
            preIndex--;
          }
          arr[preIndex + 1] = current;
        }
        return arr;
      }
    }

选择排序:

原理:遍历数组,设置最小值的索引为 0,如果取出的值比当前最小值小,就替换最小值索引,遍历完成后,将第一个元素和最小值索引上的值交换。如上操作后,第一个元素就是数组中的最小值,下次遍历就可以从索引 1 开始重复上述操作。
  function xuanZe(arr) {
    for (var i = 0; i < arr.length; i++) {
      let min = i;
      for (let j = min + 1; j < arr.length; j++) {
        if (arr[j] < arr[min]) {
          min = j;
        }
      }
      [arr[min] , arr[i]] = [arr[i] , arr[min]]
    }
  }

快速排序:

 原理:在数据集之中,找一个基准点,建立两个数组,分别存储左边和右边的数组,利用递归进行下次比较。
 function kauiSu(arr) {
    if (arr.length <= 1) {
      return arr;
    } else {
      let index = Math.floor(arr.length / 2);
      let val = arr[index]
      let right = [];
      let left = [];
      for (var i = 0; i < arr.length; i++) {
        if (arr[i] > val && i != index) {
          right.push(arr[i])
        } else if (arr[i] < val && i != index) {
          left.push(arr[i])
        }
      }
      return [...kauiSu(left), val, ...kauiSu(right)]
    }
  }

欢迎评论,会持续更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值