冒泡排序
冒泡排序的基本概念:冒泡排序类似于水中冒泡,较大的数沉下去,较小的慢慢冒起来,假设从小到大,较大的数慢慢往后排较小的数慢慢往前排
(冒泡排序其实就是每一次循环遍历,将一个最大的数一到序列末尾)
算法描述:
1.比较相邻的元素,如果前一个比后一个大,则进行位置交换。
2.第一轮排序第1个和第2个一对,比较与交换,随后第2个和第3个一对比较交换,这样直到倒数第2个和最后1个,将最大的数移动到最后一位。
3.第二轮排序得到第二大的值,放在倒数第二个位置
4.需要n-1趟
冒泡排序代码实现
例如:随机选取10个 1-100的数 放到数组中 并将其从小到大排序
//随机10个数
var list = [];
for (var i = 0; i < 10; i++) {
var num = Math.round(Math.random() * 100);
list[i] = num;
}
console.log(“原数组:”, list);
// 冒泡排序
for (var j = 0; j < list.length - 1; j++) {
for (var i = 0; i < list.length - 1 - j; i++) { // 0 length-2
if (list[i] > list[i + 1]) {
var temp = list[i];
list[i] = list[i + 1];
list[i + 1] = temp;
}
}
console.log(j, list);
}
选择排序
选择排序的基本概念:是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
算数描述:
1.第一次从下标为0的开始下标为0的这个数与后面的n-1个进行比较,找出最小或者最大的放在下标为0的这个位置;
2.第二次从下标为1的开始比较,查询剩下的最大或者最小值,放在下标为1的位置;以此类推;直到排序完成
选择排序代码实现
var list=[45, 47, 51, 54, 65, 42, 29, 0, 75, 22];
console.log(list);
for(var j=0;j<list.length-1;j++){
// list[j] 外层循环的当前元素
for(var i=j+1;i<list.length;i++){
if(list[i]<list[j]){
var temp=list[j];
list[j]=list[i];
list[i]=temp;
}
}
}
console.log(list);
区别
1.冒泡排序是比较相邻位置的两个数,而选择排序是按顺序比较,找最大值或者最小值;
2.冒泡排序每一轮比较后,位置不对都需要换位置,选择排序每一轮比较都只需要换一次位置;
3.冒泡排序是通过数去找位置,选择排序是给定位置去找数;
4.选择排序交换次数较少,一定程度上提高了运算效率,但是选择排序是不稳定的排序方法