js冒泡排序和插入排序
说明
来查这个说明大家在课上都是没听懂啊,但是都是好学生为了搞懂都来查。
好,回到正题,先说一下关于这个冒泡排序的重要性,这个虽然在排序当中算是比较简单的了,而且冒泡也是容易理解的一种排序方法。但是在多数的面试中可能会问到,更甚至还有可能要手写
冒泡排序
实现原理
数组中有 n 个数,依次比较相邻两个数,如果前者大于后者,就把两个数交换位置;如果前者小于后者,两个数的位置不变。这样一来,第一轮就可以选出一个最大的数放在最后面;那么经过 n-1(数组的 length - 1) 轮,就完成了所有数的排序。
图片演示
注意看这张图片当中每一行中的橙色圆圈,这表示每一次对相邻的两个数字进行比较。在经过多次的比较后最大的数就跑到了这一行的最后一位。然后再从头开始进行同样操作。多次后就完成了排序
代码演示
友情提示:这只是第一次排序哦!!! 代码下有很充分的注释哦!不理解的记得看哦!!!
//定义数组[3,4,1,2]
var arr = [3,4,1,2];
// 遍历数组,次数就是arr.length - 1
for (var i = 1; i < arr.length ; i++) {
// 利用if来判断大于,等于或小于,来判断是否进行位置交换
if (arr[i] > arr[i + 1]) {
//定义一个新的空的值
var temp = arr[i];
//对前后两的数进行交换
arr[i] = arr[i + 1];
//将数字依次放入新的空的值里
arr[i + 1] = temp;
}
}
// 控制台输出[3, 1, 2, 4]
console.log(arr)
到这里相信大多数的同学都有认真的看代码。
如果有没有认真看的同学请自行回去看一下代码哦! ! !
接下来是全部的代码展示了哦。
要仔细看哦
//定义数组[3,4,1,2]
var arr = [3,4,1,2];
//遍历数组
for (var i = 1; i < arr.length; i++) {
//循环比较,判断是否交换位置
for (var j = 0; j < arr.length-1; j++) {
//判断前后两个数字的大小,以便判断是否交换位置
if (arr[j] > arr[j+1]) {
//定义一个新的空的值,以便用于交换
var temp = arr[j+1];
//交换前后两数字的值
arr[j+1] = arr[j];
将前一个数字放入空的值
arr[j] = temp;
}
}
}
//输出结果[1,2,3,4]
console.log(arr);
总结
1、外层fou循环的作用:控制循环的次数。
2、内层fou循环的作用:进行两数交换,找每次的最大数,排到最后。
3、内部if语句的作用:进行前后两值的大小判断来进行下一步操作。
4、内部定义temp的作用:用于交换前后两数。可以参考交换两数中的空参。
插入排序
说明
插入排序是冒泡排序的优化,是一种更加直观的简单排序算法。
插排由于效率不高,速度较慢,大题考察少,出现频度不高,重点在于时间复杂度、空间复杂度、移动次数考察。
实现原理
通过构建有序数组的存储,对未排序的数组元素,在已排序的数组中从最后一个元素向第一个元素遍历,找到相应的位置并插入。
图片演示
由图片可以看出啊我们直接把待排序数组的第一个元素看作是一个有序的数组,从第二个至最后一个元素被看作一个无序数组。
代码演示
var arr = [10,8,100,31,87,70,1,88];
//先遍历无序数组的下标
for (var i = 1; i < arr.length; i++) {
//遍历并比较一个无序数组元素和所有有序数组元素
for (var j = i; j > 0; j-- ) {
if (arr[j - 1] > arr[j]) {
var temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
}
}
}
//输出结果[1,8,10,31,70,87,88,100]
console.log(arr);
代码描述
1)从第一个元素开始,该元素可以被认为已经被排序
2)取出下一个元素,在已经排好序的序列中从后往前扫描
3)直到找到小于或者等于该元素的位置
4)将该位置后面的所有已排序的元素从后往前依次移一位
5)将该元素插入到该位置
6)重复步骤2~5
总结
1、外层fou循环的作用:遍历无序数组的下标。
2、内层fou循环的作用:遍历并比较一个无序数组元素和所有有序数组元素。
3、内部if语句的作用:进行前后两值的大小判断来进行下一步操作。
4、内部定义temp的作用:用于交换前后两数。可以参考交换两数中的空参。
末尾
既然都看到了这里相信你已经学会了冒泡排序和插入排序了吧!
既然学会了,觉得写的不错的点个赞再走吧~