一、冒泡排序

//冒泡排序,属于交换类排序
//从底部开始,元素与前面相邻元素比较,逆序则交换,
//将较小的元素逐渐从底部向顶部移动。
//从小到大排序
let arr = [5, 8, 6, 3, 0, 45, 7, -5, 78, 32]
for (let i = 0; i <= arr.length - 1; i++) {//外层循环是从0开始for (let j = arr.length - 1; j > i; j--) {//内层循环是从arr.length-1开始if (arr[j] < arr[j - 1]) {//如果逆序,则交换[arr[j], arr[j - 1]] = [arr[j - 1], arr[j]];//交换}}
}
console.log(arr);//排序后的数组

冒泡排序是属于交换类的排序,另外基于交换的排序还有快速排序(快排)

二、快速排序

//快速排序,涉及到递归
let arr = [5, 8, 6, 3, 9, 45, 9, -5, -2, 32]function sort(arr, low, high) {//以arr[low]为基准let temp = arr[low];while (low < high) {if (arr[low] > arr[high]) {[arr[low], arr[high]] = [arr[high], arr[low]];//交换值}//交换之后,temp值在low处还是在high处?自增和自减就刚刚好相反来//temp值在low处,则high--   temp值在high处,则low++if (arr[low] == temp) high--;if (arr[high] == temp) low++;}return low;//返回基准最后所在的下标位置
}function quickSort(arr, low, high) {if (low >= high) {//当low值小于或等于high值时,说明已经没必要快排了return;}let trueIndex = sort(arr, low, high); //得到当前快排的子序列的基准所在的下标quickSort(arr, low, trueIndex - 1);//前部分的快排quickSort(arr, trueIndex + 1, high);//后部分的快排
}quickSort(arr, 0, arr.length - 1);
console.log(arr);

三、插入排序

//inserSort插入排序
//从第二个元素开始,将待排元素插入到前面已经排好序的序列中
let arr = [5, 8, 6, 3, 9, 45, 7, -5, -2, 32]
for (let i = 1; i < arr.length - 1; i++) {//外层循环是从下标1开始,递增let temp = arr[i];for (let j = i - 1; j >= 0; j--) {//内层循环从外层循环值-1开始,往前递减if (arr[j] <= temp) {//如果当前的j下标元素已经是小于或等于temp的,直接break结束内循环break;}if (arr[j] > temp) {arr[j + 1] = arr[j];//将当前j下标的元素值往后挪arr[j] = temp; //让当前的j下标的元素变成temp}}
}
console.log(arr)

插入排序升级版叫做希尔排序,是分组的插入排序

四、希尔排序

//希尔排序,是分组插入排序
//将序列按一定的间隔分成一组一组的序列,再对这些序列进行插入排序
let arr = [5, 8, 3, 9, -5, -2, 9, 32];function sort(arr, gap) {for (let i = 0; i < arr.length; i++) {let temp = arr[i];//此处就是插入排序,只是将间隔1变成了gapfor (let j = i - gap; j >= 0; j = j - gap) {if (arr[j] <= temp) {break;} else {arr[j + gap] = arr[j];arr[j] = temp;}}}
}function shellSort(arr, gap) {console.log(gap)if (gap == 1) {//如果gap已经是1,则不需要再递归sort(arr, 1);return;} else {sort(arr, gap);let nextGap = Math.floor(gap / 2);//获得下一轮的gapshellSort(arr, nextGap);}
}
shellSort(arr, Math.floor(arr.length / 2));
console.log(arr);

五、选择排序

//每次在剩余的元素中选择最小的元素,添加到已经排好序的元素序列尾部
let arr = [5, 8, 6, 3, 9, 45, 9, -5, -2, 32]
for (let i = 0; i <= arr.length - 2; i++) { //外层循环 从第一个元素到倒数第二个元素let min = arr[i];let k = i; //标记最小的元素所在的下标for (let j = i + 1; j <= arr.length - 1; j++) { // 内层循环就是一个找最小值的过程if (arr[j] < min) {min = arr[j];k = j;//同时要更新最小值所在的下表}}arr[k] = arr[i];//让i下标的元素放到最小值所在的下标处arr[i] = min;// 在i下标处放置最小元素
}
console.log(arr);

JS代码实现一些常见的排序算法相关推荐

  1. JS 常见的排序算法

    工作中算法不常用,但是排序经常用.因此在这里整理了几种JS中常见的排序算法. 冒泡排序 1.算法思想:判断两个相邻元素,大于则交换位置 2.算法步骤 从数组中第一个数开始,依次与下一个数比较并次交换比 ...

  2. 常见的排序算法与MSQL

    常见的排序算法 1.常见的排序算法 冒泡排序法.快速排序法.简单选择排序法.堆排序法.直接插入排序法.希尔排序法.合并排序法. (1)冒泡排序法:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现 ...

  3. access两字段同时升序排序_7 天时间,我整理并实现了这 9 种常见的排序算法

    排序算法 回顾 我们前面已经介绍了 3 种最常见的排序算法: java 实现冒泡排序讲解 QuickSort 快速排序到底快在哪里? SelectionSort 选择排序算法详解(java 实现) 然 ...

  4. python常用算法有哪些_python常见的排序算法有哪些?

    大家都知道,关于python的算法有很多,其中最为复杂的就是python的排序算法,因为它并不是单一的,而是复杂的,关于排序算法就有好几种不同的方式,大家可以根据以下内容,结合自己的项目需求,选择一个 ...

  5. 七种常见的排序算法总结

    目录 引言 1.什么是排序? 2.排序算法的目的是什么? 3.常见的排序算法有哪些? 一,插入排序 1.基本思想 2.代码实现 3.性能分析 4.测试 二,希尔排序(缩小增量排序) 1.基本思想 2. ...

  6. 基于比较的常见的排序算法

    目录 写在前面 排序 稳定性 排序的分类 常见的基于比较的排序 直接插入排序 代码 性能分析 总结 代码优化 折半插入 希尔排序 希尔排序 如何分组 代码 性能分析 选择排序 代码 性能分析 双向选择 ...

  7. 【数据结构---排序】庖丁解牛式剖析常见的排序算法

    排序算法 一.常见的排序算法 二.常见排序算法的实现 1. 直接插入排序 2. 希尔排序 3. 直接选择排序 4. 堆排序 5. 冒泡排序 6. 快速排序 6.1 递归实现快速排序 思路一.hoare ...

  8. PHP面试题:请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。

    常见的排序算法: 冒泡排序法.快速排序法.简单选择排序法.堆排序法.直接插入排序法.希尔排序法.合并排序法. 冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键 ...

  9. 常见的排序算法的稳定性

    分析一下常见的排序算法的稳定性,每个都给出简单的理由. 冒泡排序 冒泡排序就是把小的元素往前调或者把大的元素往后调.比较是相邻的两个元素比较,交换也发生在这两个元素之间.所以,如果两个元素相等,我想你 ...

最新文章

  1. Centos源码安装Cmake
  2. 跨域解决请求限制(script标签)(热门搜索出现对应的词条)
  3. Element中 el-tag 点击事件 el-tag添加@click事件无效
  4. 真实的用户,真实的中国互联网
  5. 联想陈旭东:我们有工匠精神
  6. python结构模式图_NetworkX:Python图与网络模型基础
  7. js打印线程id_Node.js多线程完全指南[每日前端夜话0x43]
  8. jQuery 图片轮播插件–GalleryView
  9. Matlab数据拟合方法介绍
  10. 通过js动态设置字体大小
  11. 赵燕菁:城市化2.0与规划转型 ——一个两阶段模型的解释│宏论
  12. 一年工作经验,两周的面试,拿到几个offer的面试经验总结
  13. Windows 11正式版来了!一文带你免费升级、镜像下载、最低系统要求
  14. python绘制三重积分图像_三重积分-图解高等数学13 | 文艺数学君
  15. Unity中的混合光照
  16. 大数据 - MapReduce编程案例 -BH3
  17. c#实现爬虫获取小说(.NET)
  18. 《牡丹亭》中的情与理
  19. Android 实现定位
  20. mysql 重启监听器_Oracle Lsnrctl监听器的启动和关闭

热门文章

  1. PR-视频加介绍背景
  2. JAVA计算机毕业设计美容院信息管理系统(附源码、数据库)
  3. 信托公司EAST4.0功能框架
  4. python自动定位_自动化的8种元素定位 分享助:Python自动
  5. 今日前端小知识——遍历对象的方法
  6. java 简单贪吃蛇
  7. html剪纸服务器的字体样式,如何在HTML中使用图标字体 - icon font?
  8. 怎样通过font属性控制CSS字体样式?
  9. 记一次自定义Redis分布式锁导致的生产事件时间
  10. Excel 防止日期变成数字