IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 前端基本的排序算法 -> 正文阅读

[数据结构与算法]前端基本的排序算法

1.冒泡排序:

通过相邻元素的比较和交换,使得每一趟都能找到未有序数组的最大值或者最小值
时间复杂度:?最好:O(n)???最坏:O(n^2)???最平均:O(n^2)
function bubbleSort(arr) {
  console.time('冒泡排序耗时');
  let arr = [...arr]; // 做浅拷贝避免影响原数组
  for (var i = 0, len = arr.length; i < len; i++ ) {
   // 为什么arr.length-1-i?因为每次遍历完后最大值肯定在最右边,数组的后面的那段其实已经是排序好,无需在排序
    for (var j = 0; j < len - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; // 拆开看arr[0] = arr[1]; arr[1] = arr[0]

      }
    }
  }
  console.timeEnd('冒泡排序耗时');
  return arr;
}

2.选择排序:

和冒泡排序类似,区别在于是将每个元素和他后面的元素比较交换
时间复杂度: ?最好:O(n^2) ? ?最坏:O(n^2)?? ?最平均:O(n^2)
function selectSort(arr) {
  console.time('选择排序耗时');
   for (var i = 0, len = arr.length; i < len; i ++) {
     for (var j = i + 1; j < len; j++) {
       if (arr[i] > arr[j]) {
        [arr[i], arr[j]] = [arr[j], arr[i]]
       }
     }
   }
   console.timeEnd('选择排序耗时');
   return arr;
 }

3.插入排序:

以第一个元素作为有序数组,其后的元素通过在这个已有的数组中找到合适的位置并插入
时间复杂度:
?最好:O(n), 原数组已经是升序的。
?最坏:O(n^2)
?最平均:O(n^2)
function insertionSort(d) {
  console.time('插入排序耗时:');
  var arr = [...d];
  var len = arr.length;
  var preIndex; // 索引
  var current; // 当前值
  debugger;
  for (var i = 1; i < len; i++) {
    preIndex = i - 1;// 0开始
    current = arr[i];// 一开始拿到第二个值
    while (preIndex >= 0 && arr[preIndex] > current) {
      arr[preIndex + 1] = arr[preIndex];
      preIndex--;
    }
    arr[preIndex + 1] = current;
  }
  console.timeEnd('插入排序耗时:');
  return arr;
}

4.快速排序:

1.在数组中选择一个元素作为'基数'; ?

2.所有小于'基数'的元素都移到'基数'左边,所有大于基数的都移到右边。 ?

3.对'基数'左边和右边两个子集不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

?时间复杂度: 最好:O(nlogn) ?最坏:O(n^2) ?最平均:O(nlogn)

function quickSort(arr) {
  if (arr.length <= 1) return arr;
  var tempIndex = Math.floor(arr.length/2);
  var temp = arr.splice(tempIndex, 1)[0];  //基数
  var leftArr = [];  //小于基数的集合
  var rightArr = [];  //大于基数的集合
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] > temp) {
      rightArr.push(arr[i]);
    } else {
      leftArr.push(arr[i]);
    }
  }
  return quickSort(leftArr).concat(temp, quickSort(rightArr));
}

附上菜鸟教程提供的一张相关排序算法的时间复杂度及相关算法讲解链接

点我icon-default.png?t=LA92https://www.runoob.com/w3cnote/ten-sorting-algorithm.html

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 11:18:39  更:2021-12-10 11:19:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/10 2:57:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码