JS中的冒泡排序和选择排序
一、冒泡排序
- 基本思想:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序,则交换,使值较大的元素逐渐从前移向后部,就像水底的气泡一下逐渐向上冒。
图片演示
代码
function bubbleSort(arr) {
var len = arr.length;
for (var i = 0; i < len; i++) {
for (var j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j+1]) { //相邻元素两两对比
var temp = arr[j+1]; //元素交换
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
二、选择排序
- 拿出用数组第一项与数组的第二次开始一次比较,将最小的那一项的索引值[min]保存,然后再将数组的第一项索引为[0]与这个最小值兑换位置。(第一次循环找出数组中最小的放在第一位)
- 让后再拿出数组第二项,与数组的第三项开始找出数组中第二小的值的索引[min],然后与数组中第二项索引为[1]的互换位置。
图片演示
代码
function selectionSort(arr) {
var len = arr.length;
var minIndex, temp;
for (var i = 0; i < len - 1; i++) {
minIndex = i;
for (var j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) { //寻找最小的数
minIndex = j; //将最小数的索引保存
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}
三、插入排序
- 基本思想:
- 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。当然,如果你说你打扑克牌摸牌的时候从来不按牌的大小整理牌,那估计这辈子你对插入排序的算法都不会产生任何兴趣了。。。
- 插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。对于这种算法,得了懒癌的我就套用教科书上的一句经典的话吧:感兴趣的同学可以在课后自行研究。。。
图片演示
代码
function A(arr){
var preIndex,current; //定义两个值用来实现位置互换的方法
var len = arr.length;//定义len为长度length,方便后面书写
for(var i=1;i<len;i++){//利用for循环来实现对每一个数之间的比较
preIndex=i-1;//i-1代表i前面的数,preIndex代表i前面的数
current=arr[i];//current代表i这个位置的数
while(preIndex >= 0 && arr[preIndex]>current){//利用while判断语句比较两个数之间的大小关系,当preIndex >= 0且arr[preIndex]>current 执行while函数内部代码
arr[preIndex+1] = arr[preIndex];//preIndex+1将数值赋值与arr[preIndex]
preIndex--;//arr[preIndex]向前移动一个位置
}
arr[preIndex + 1]=current;//将preIndex +1 的数值赋予current;
}//完成排序
return arr;//返回函数值
}
var sel = [1,2,5,3,6,2,4,5,8,6]//声明一个实验变量,用于实验函数的可行性
console.log(A(sel));//调用函数