深入了解插入排序和冒泡排序,并用js实现
来源:互联网 发布:宣传部网络舆情 编辑:程序博客网 时间:2024/06/08 08:53
1、插入排序
步骤如下:
(1) 从第一个元素开始,该元素可以认为已经被排序
(2) 取出下一个元素,在已经排序的元素序列中从后向前扫描
(3) 如果该元素(已排序)大于新元素,将该元素移到下一位置
(4) 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
(5)将新元素插入到下一位置中
(6) 重复步骤2
具体实现如下,通过代码和注释(注释很多纯粹是为了帮助初学者了解)的结合可以更形象地展示算法的细节
var preIndex, current; for (var i = 1; i < len; i++) { // 记住i = 1,即从第二插起 preIndex = i - 1; // 索引为长度-1,这是已排好的数组的最大一个(即最后一位) current = arr[i]; // current代表要被插的数,其实从第二个元素插起 while(preIndex >= 0 && arr[preIndex] > current) { // &&是与,即索引i-1>=0且索引i-1大于i(前一个元素大于后一个)。。= arr[preIndex+1] = arr[preIndex]; // 前一个大于被插数,则将前一个往前挪 preIndex--; // 即arr[i-2]是否大于i,如果是则继续while循环,继续往前挪,直到不符合whlie条件 // 换句话说,i和[1···i-1]都要比一次 } // while完毕后,可以保证被插数插到了正确的位置(稳定的算法) arr[preIndex+1] = current; // preIndex+1是因为最后一个preIndex--后preIndex为负了,不能通过while循环条件 // 表明此时被插数已经插到了最前面[0]。 //具体过程举例如下:[5,6,7,8,1]将1插入,在while时的变化为[5,6,7,8,8],[5,6,7,7,8],[5,6,6,7,8],[5,5,6,7,8] // 最后(preIndex--后)的值为-1 //arr[preIndex+1] = current;即arr[0]=current。将被插数赋值到正确的位置。 } return arr;}
2、冒泡排序
冒泡排序算法的运作如下:(从后往前)
(1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。
(2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
(3)针对所有的元素重复以上的步骤,除了最后一个。
(4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
function bubbleSort(arr) { var len = arr.length; for (var i = 0; i < len; i++) { // i的作用只是为了下面j < len - 1 - i,即不比已排好后的部分数 for (var j = 0; j < len - 1 - i; j++) { // j < len - 1 - i代表以排好的元素就不管比了 // 这里最后是len - 1 - i和len-i比 // 每次j都要重新归零,是为了比较前面的数 if (arr[j] > arr[j+1]) { //相邻元素两两对比 var temp = arr[j+1]; //元素交换 arr[j+1] = arr[j]; // 还是把前一个赋值给后一个 arr[j] = temp; } } } return arr;}
阅读全文
0 0
- 深入了解插入排序和冒泡排序,并用js实现
- 了解堆排序并用js实现
- python3实现冒泡排序和插入排序
- 冒泡排序、选择排序、插入排序的js实现
- js实现排序算法(冒泡排序,直接插入排序)
- 用js实现算法:冒泡排序、插入排序和快速排序
- js实现冒泡排序和快速排序
- 冒泡排序,插入排序和选择排序实现
- 冒泡排序、选择排序和插入排序的实现
- java选择排序、冒泡排序和插入排序实现
- js冒泡排序,选择排序,插入排序
- 插入排序和冒泡排序
- 冒泡排序和插入排序
- 插入和冒泡排序
- 选择、插入、冒泡排序实现和比较
- python实现插入和冒泡排序
- 冒泡排序, 简单选择排序, 插入排序, 希尔排序, 快速排序 js 实现
- 冒泡排序,快速排序,插入排序和 JS sort() 排序(JS)
- python工作实例
- 信号屏蔽pending
- 什么是数据归一化,数据为什么要做归一化处理
- 11.3usaco比赛失利
- web seo 中visibility display
- 深入了解插入排序和冒泡排序,并用js实现
- SQLite实用武器库(4)附加数据库(Attach DB)
- 服务端架构中的gateway
- 论scanf函数和gets函数的微妙关系
- Android弹框的使用(界面优美)
- VMware设置CentOS7固定IP
- 小学生算术
- ubuntu配置虚拟ip
- CSS 盒子模型