js 数组排序的方式

var numberList = [5, 100, 94, 71, 49, 36, 2, 4];

冒泡排序:

相邻的数据进行两两比较,小数放在前面,大数放在后面,这样一趟下来,最小的数就被排在了第一位,第二趟也是如此,如此类推,直到所有的数据排序完成。

function bubbleSort(arr) {
        for (var i = 0; i < arr.length - 1; i++) {
          //确定轮数
          for (var j = 0; j < arr.length - i - 1; j++) {
            //确定每次比较的次数
            if (arr[j] > arr[j + 1]) {
              tem = arr[j];
              arr[j] = arr[j + 1];
              arr[j + 1] = tem;
            }
          }
          console.log("第" + i + "次排序" + arr);
        }
}
bubbleSort(numberList);

选择排序:

找到数组中最大(最小)的元素将该元素与数组中第一个元素交换位置(如果第一个元素就是最大或者最小的元素那么就和自己交换位置)在剩下的元素中找到最大(小)的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。

function selectionSort(arr) {
        // 外层循环,从该位置取数据,剩下最后一个数字无需选择排序,因此-1
        for (let i = 0; i < arr.length - 1; i++) {
          let min = i; // 初始时假设当前最小数据的下标为i,并记录在min中
          // 内层循环,找出最小的数字下标
          for (let j = min + 1; j < arr.length; j++) {
            // 如果记录的最小数字大于当前循环到的数组数字
            if (arr[min] > arr[j]) {
              min = j; // 将min修改为当前的下标
            }
          }
          // 内层循环结束,此时min记录了剩余数组的最小数字的下标
          // 将min下标的数字与i位置的数字交换位置
          let temp = arr[min];
          arr[min] = arr[i];
          arr[i] = temp;
          console.log("第" + i + "次排序" + arr);
        }
}
 selectionSort(numberList);

快速排序:

首先设定一个分界值,通过该分界值将数组分成左右两部分。

将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。

然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。

重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

 

  // 快速排序
function quickSort(arr) {
        //1.判断传入的数组长度,如果是一个就直接返回
          //1.判断传入的数组长度,如果是一个就直接返回
        if (arr.length <= 1) {
          return arr;
        }
        //2.如果长度不为1,那么就取数组的中间值
        let contentIndex = Math.floor(arr.length / 2);
        let contentValue = arr.splice(contentIndex, 1)[0];
        //3.先定义左右两个数组,然后让数组中剩余的数与中间数进行比较,比中间数小的放到左边的数组,比中间数大的放到右边的数组。
        let leftArr = [];
        let rightArr = [];
        for (let i = 0; i < arr.length; i++) {
          let item = arr[i];
          item > contentValue ? rightArr.push(item) : leftArr.push(item);
        }
        //4.使用递归的方式让左右两边的数组持续这样处理,直至左右两边的数组都排好序,最后三者进行拼接
        return quickSort(leftArr).concat(contentValue, quickSort(rightArr));
}
 var arr = quickSort(numberList);

相关推荐

  1. js 数组排序方式

    2024-02-23 00:04:04       36 阅读
  2. js 关于数组排序方法

    2024-02-23 00:04:04       11 阅读
  3. js关于数字方法

    2024-02-23 00:04:04       6 阅读
  4. js数组合并方法,以及各方法区别

    2024-02-23 00:04:04       34 阅读
  5. js数组方法笔记

    2024-02-23 00:04:04       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-23 00:04:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-23 00:04:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-23 00:04:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-23 00:04:04       20 阅读

热门阅读

  1. 拉链表的概念设计与实现

    2024-02-23 00:04:04       31 阅读
  2. logbak日志单独打印(方法层级)

    2024-02-23 00:04:04       27 阅读
  3. vue 中 Vue.prototype 详解及使用

    2024-02-23 00:04:04       29 阅读
  4. VueTreeselect 只能选择末级节点

    2024-02-23 00:04:04       26 阅读
  5. Vue源码系列讲解——生命周期篇【二】(new Vue)

    2024-02-23 00:04:04       27 阅读
  6. Oracle数据库批量变更字段类型

    2024-02-23 00:04:04       26 阅读
  7. C# TCP/IP协议

    2024-02-23 00:04:04       28 阅读
  8. 2024年开发踩坑记录

    2024-02-23 00:04:04       21 阅读
  9. C语言技巧总结(自用)

    2024-02-23 00:04:04       29 阅读
  10. Web基础

    Web基础

    2024-02-23 00:04:04      31 阅读
  11. 深入理解Python爬虫的Response对象

    2024-02-23 00:04:04       33 阅读