JS代码实现一些常见的排序算法
一、冒泡排序
//冒泡排序,属于交换类排序
//从底部开始,元素与前面相邻元素比较,逆序则交换,
//将较小的元素逐渐从底部向顶部移动。
//从小到大排序
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代码实现一些常见的排序算法相关推荐
- JS 常见的排序算法
工作中算法不常用,但是排序经常用.因此在这里整理了几种JS中常见的排序算法. 冒泡排序 1.算法思想:判断两个相邻元素,大于则交换位置 2.算法步骤 从数组中第一个数开始,依次与下一个数比较并次交换比 ...
- 常见的排序算法与MSQL
常见的排序算法 1.常见的排序算法 冒泡排序法.快速排序法.简单选择排序法.堆排序法.直接插入排序法.希尔排序法.合并排序法. (1)冒泡排序法:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现 ...
- access两字段同时升序排序_7 天时间,我整理并实现了这 9 种常见的排序算法
排序算法 回顾 我们前面已经介绍了 3 种最常见的排序算法: java 实现冒泡排序讲解 QuickSort 快速排序到底快在哪里? SelectionSort 选择排序算法详解(java 实现) 然 ...
- python常用算法有哪些_python常见的排序算法有哪些?
大家都知道,关于python的算法有很多,其中最为复杂的就是python的排序算法,因为它并不是单一的,而是复杂的,关于排序算法就有好几种不同的方式,大家可以根据以下内容,结合自己的项目需求,选择一个 ...
- 七种常见的排序算法总结
目录 引言 1.什么是排序? 2.排序算法的目的是什么? 3.常见的排序算法有哪些? 一,插入排序 1.基本思想 2.代码实现 3.性能分析 4.测试 二,希尔排序(缩小增量排序) 1.基本思想 2. ...
- 基于比较的常见的排序算法
目录 写在前面 排序 稳定性 排序的分类 常见的基于比较的排序 直接插入排序 代码 性能分析 总结 代码优化 折半插入 希尔排序 希尔排序 如何分组 代码 性能分析 选择排序 代码 性能分析 双向选择 ...
- 【数据结构---排序】庖丁解牛式剖析常见的排序算法
排序算法 一.常见的排序算法 二.常见排序算法的实现 1. 直接插入排序 2. 希尔排序 3. 直接选择排序 4. 堆排序 5. 冒泡排序 6. 快速排序 6.1 递归实现快速排序 思路一.hoare ...
- PHP面试题:请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。
常见的排序算法: 冒泡排序法.快速排序法.简单选择排序法.堆排序法.直接插入排序法.希尔排序法.合并排序法. 冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键 ...
- 常见的排序算法的稳定性
分析一下常见的排序算法的稳定性,每个都给出简单的理由. 冒泡排序 冒泡排序就是把小的元素往前调或者把大的元素往后调.比较是相邻的两个元素比较,交换也发生在这两个元素之间.所以,如果两个元素相等,我想你 ...
最新文章
- Centos源码安装Cmake
- 跨域解决请求限制(script标签)(热门搜索出现对应的词条)
- Element中 el-tag 点击事件 el-tag添加@click事件无效
- 真实的用户,真实的中国互联网
- 联想陈旭东:我们有工匠精神
- python结构模式图_NetworkX:Python图与网络模型基础
- js打印线程id_Node.js多线程完全指南[每日前端夜话0x43]
- jQuery 图片轮播插件–GalleryView
- Matlab数据拟合方法介绍
- 通过js动态设置字体大小
- 赵燕菁:城市化2.0与规划转型 ——一个两阶段模型的解释│宏论
- 一年工作经验,两周的面试,拿到几个offer的面试经验总结
- Windows 11正式版来了!一文带你免费升级、镜像下载、最低系统要求
- python绘制三重积分图像_三重积分-图解高等数学13 | 文艺数学君
- Unity中的混合光照
- 大数据 - MapReduce编程案例 -BH3
- c#实现爬虫获取小说(.NET)
- 《牡丹亭》中的情与理
- Android 实现定位
- mysql 重启监听器_Oracle Lsnrctl监听器的启动和关闭