冒泡排序
基本思路:双重for循环
第一个for控制轮数,轮数为数据个数-1
第二个for控制次数,次数为数据个数-1(至少两两比较)
法一:(简单版)
原理:相邻两元素比较,大的靠后,排列元素个数 -1 轮,每轮排列元素个数 -1 次
技术点:排列元素个数 -1 轮,每轮排列元素个数 -1 次
步骤:
1. 需要两个 for 循环
2. 一个控制轮数,元素个数 -1 轮;一个控制次数,元素个数 -1 次
法二:(中级版)
原理:因为每轮比较之后都能获得一个最符合标准的,所以每轮比较之后都少比较一次
arr . length - 1 - i
原理:相邻两元素比较,大的靠后,排列元素个数 -1 轮,每轮排列元素个数 -1 次
技术点:排列元素个数 -1 轮,每轮排列元素个数 -1 次
步骤:
1. 需要两个 for 循环
2. 一个控制轮数,元素个数 -1 轮;一个控制次数,元素个数 -1 次
3.
作比较,相邻两元素谁大谁在后面,如果前面的比后面大,交换位置
var arr = [2,5,1,3,6,4];//示例数组
for(var i=0; i<arr.length-1; i++) {
for(var j=0; j<arr.length-1; j++) {
if(arr[j] > arr[j+1]) {
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log(arr);
法二:(中级版)
原理:因为每轮比较之后都能获得一个最符合标准的,所以每轮比较之后都少比较一次
arr . length - 1 - i
var arr = [2,5,1,3,6,4];//示例数组
for(var i=0; i<arr.length-1; i++) {
for(var j=0; j<arr.length-1-i; j++) {
if(arr[j] > arr[j+1]) {
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log(arr);
法三:(旗舰版)
原理:当没有任何元素交换位置的时候,跳出外循环
技术点:开闭原则。
刚开始假设整个数组排序好了, 当没有任何元素交换位置的时候,跳出外循环
原理:当没有任何元素交换位置的时候,跳出外循环
技术点:开闭原则。
刚开始假设整个数组排序好了, 当没有任何元素交换位置的时候,跳出外循环
function bubbleSort(arr){
var isSort;//标志位
for(var i=0; i<arr.length-1; i++){
isSort = true; //假设已排好
for(var j=0; j<arr.length-1-i; j++){
if(arr[j] > arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
isSort = false; //有数交换,说明还没排好
}
}
if(isSort){
break; //如果已排好,就跳出循环
}
}
return arr;//返回已排好的数组
}