JavaScript数组排序方法

JavaScript数组排序方法
  1. Es6 - sort()方法
<script>
let arr = [6,5,4,2,7,1,3];
console.log(arr.sort()) // [1, 2, 3, 4, 5, 6, 7]

function sortNumber(a,b){
  // return a - b   // [1, 2, 3, 4, 5, 6, 7]   
  return b - a      // [7, 6, 5, 4, 3, 2, 1]
}
console.log(arr.sort(sortNumber))
</script>

  1. 冒泡排序

原理:冒泡排序是最简单的,只需要通过两次遍历,两两交换,就可以实现排序。

  <script>
    let arr = [6,5,4,2,7,1,3];
    // 冒泡排序
    function sortArr(arr) {
      for (let i = 0; i < arr.length - 1; i++) { // 最后一次不需要 循环
        for (let j = 0; j < arr.length - i; j++) { // 二次遍历,每次都是在 i 之后执行, 假如有8个元素,那么就遍历 i 之后的 7个元素
          if (arr[j] < arr[j - 1]) { // 如果右边,小于左边,那么交换位置
            let temp = arr[j]; // temp作为中间变量
            arr[j] = arr[j - 1];
            arr[j - 1] = temp;
          }
        }
      }
      return arr;
    }
    console.log(sortArr(arr))
  </script>

在这里插入图片描述
3. 插入排序

原理:
1、从第二个元素开始,遍历它之前的元素。
2、如果他之前的元素,大于他,那么交换。并继续往前遍历之前比它大的元素。

//插入排序
    function arrSort(array) {
      for (let i = 1; i < array.length; i++) {//遍历一波数组,从数组第二项开始遍历
        let key = array[i];//这里必须要定义,因为循环结束,会用到。
        let j = i - 1;//定义j为i-1,在第一次遍历,是从数组第一项开始
        while (j >= 0 && array[j] > key) { // 如果j的值大于i的值,也就是左边的数大于右边的数,j>=0,防止j--变负数。
          array[j + 1] = array[j];  // 例如第二项和第三项248和31,那么变成,31,248
          j--; // 如果248>31执行成功了,变成了31,248,那么依次判断左边,是否有小于 31 的。
        }
        array[j + 1] = key;//把第一项赋值成最小的那个。
      }
      return array;
    }
    console.log(arrSort(arr));

在这里插入图片描述
4. 选择排序
原理:跟冒泡排序差不多,也是两两交换,不过这两两交换,是第一位和第五位交换,而不是第四位和第五位。

//选择排序
    // 1
    function arrSort(arr) {
      for (let i = 0; i < arr.length - 1; i++) {//遍历数组
        let min = arr[i]; // 防止arr[i]发生变化 -- 6
        for (let j = i + 1; j < arr.length; j++) { // 双重遍历,查找最小的数进行交换,                     
          if (min > arr[j]) {                      // 跟冒泡不一样的地方在于,选择排序,假如第4位更小,则是1,4位交换,不是3,4位交换
            console.error(min + "-----" + arr[j])                    
            let temp = min;
            // console.error(temp)
            min = arr[j];
            arr[j] = temp;
          }
        }
        arr[i] = min;
      }
      return arr;
    }
    console.log(arrSort(arr));

在这里插入图片描述

    // 2
    function selectSort(arr) {
      var len = arr.length
      var minIndex, temp
      for (var i = 0; i < len - 1; i++) {
        minIndex = i   // 0,1,2,3,4 下标
        console.error(minIndex)
        for (var j = i + 1; j < len; j++) {
          if (arr[j] < arr[minIndex]) {
            console.error(arr[j] + "-----" + arr[minIndex])
            minIndex = j
          }
        }
        temp = arr[i]
        arr[i] = arr[minIndex]
        arr[minIndex] = temp
      }
      return arr
    }
    console.log(selectSort(arr))

在这里插入图片描述

待续。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值