js十大排序 个人理解(个人总结,适合新手观看理解,不间断更新)

看这篇博客  非常详细  https://www.cnblogs.com/AlbertP/p/10847627.html

1 .冒泡排序

 

function bubbleSort(arr) {
  let len = arr.length
  for (let i = 0; i < len; i++) {
    for (let j = 0; j < len; j++) {
      if (arr[j] > arr[j + 1]) {        //相邻元素两两对比
        let temp = arr[j + 1]        //元素交换
        arr[j + 1] = arr[j]
        arr[j] = temp
      }
    }
  }
  return arr
}

为什么 第二个循环要 - 1 - i

因为 整体循环一次就是选取了一个最大值在最后,所以每一次子循环就可以减少一次对比,所以减去一个父循环的索引 “i”,  减1 是因为子循环判断。 【j+1】= j   子循环到倒数第二个的时候已经做了最后一个排序 所以 并不需要再进行length长度的排序

其实 len-i-1 都是为了减少不必要的运算   不减也可以

function ppp (arr){
  let len = arr.length
  for (let i = 0; i < len; i++) {
    for (let j = 0; j < len; j++) {
      if (arr[j] > arr[j+1]) {        //相邻元素两两对比
        let temp = arr[j + 1]        //元素交换
        arr[j + 1] = arr[j]
        arr[j] = temp
      }
    }
  }
  return arr
}

感兴趣可以尝试下

相应的可以推倒  从大到小排序

function ccc (arr){
  let len = arr.length
  for (let i = 0; i < len; i++) {
    for (let j = len  ; j > 0 + i - 1; j--) {
      if (arr[j] > arr[j-1]) {        //相邻元素两两对比
        let temp = arr[j - 1]        //元素交换
        arr[j - 1] = arr[j]
        arr[j] = temp
      }
    }
  }
  return arr
}

因为中间的条件是 j>0 所以  let  j = len - i  当然 和上一个一样。。可以直接 j = len3

 

但是!!!!!!!!!!!!!

 

平时做项目 一般排序都是用 sort排序  从大到小

console.log(arr.sort((a, b) => {
  return a - b
}))

从小到大

console.log(arr.sort((a, b) => {
  return b - a
}))

 

 

2  选择排序

function selectionSort(arr) {
  var len = arr.length;
  var minIndex, temp;
  for (var i = 0; i < len - 1; i++) {
    minIndex = i;
    for (var j = i + 1; j < len; j++) {
      if (arr[j] < arr[minIndex]) {     //寻找最小的数
        minIndex = j;                 //将最小数的索引保存
      }
    }
    temp = arr[i];
    arr[i] = arr[minIndex];
    arr[minIndex] = temp;
  }
  return arr;
}

这个很好理解, 例如 数组 [3,2,1,4]  父级循环 从3开始比对 比对出第一个数 是2  因为 j = i +1  ; 

2<3 成立  所以  minIndex = j = 1  子循环继续  j = 2  arr[j] = 1   1<2 成立  minIndex = j = 2 逐个比对完毕  

子循环结束。。第一轮父级循环  temp = 3  arr[0] = arr[2]  arr[2] = temp = 3  交换了位置 (文字解释真的有点累 感兴趣直接运行爽快 干脆)

这个选择排序 重点突出的是 互换原则

这个函数也是从小到大排序。。同理可以推论从大到小排序。。 把 子循环的< 换成 > 号即可。。。

还是但是。。正常项目中推荐  sort 几行代码搞定排序

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值