排序算法1——冒泡排序

1.冒泡排序
思想:
第一趟:相邻两个位置上的数进行比较,大的排后面(或者前面),进行交换顺序,继续和下一个数进行比较,这样找到最大(最小)的数字。
第二趟:相同的规则,找到第二大(小)的数,
...

//冒泡排序算法
var array = [23,546,57,34,7869,1324];

*原始排序(不将比较后的数挑选出来,只是排到后面) ------
// 控制趟数
var s = 0; //记录循环此次
for(var i = 0; i // 控制两两比较的次数
for(var j = 0; j < array.length - 1; j++){
if(array[j] > array[j+1]){
var temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
s++;
}
}
console.log('s',s); // 比较次数最多25次 (数字长度减1的平方)
console.log('array',array);

*内循环可以减少比较次数:(将比较后的数挑选出来,在剩下的数里面按照上面的规则找到剩下最大的数)

//冒泡排序算法
var array = [23,546,57,34,7869,1324];
// 控制趟数
var s = 0; //记录循环此次
for(var i = 0; i // 控制两两比较的次数
for(var j = 0; j < array.length - 1 - i ; j++){
if(array[j] > array[j+1]){
var temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
s++;
}
}
console.log('s',s); // 比较次数 15次
console.log('array',array);

*检测某一趟是否需要交换位置。
(如果检测到跑一趟后,两两数没有再交换顺序了,则说明已经排序好了,不需要再循环了)

//冒泡排序算法
var array = [23,546,57,34,7869,1324];
// 控制趟数
var s = 0; //记录循环此次
for(var i = 0; i // 控制两两比较的次数
var isSort = true; //每一趟开始前,先假设就已经排好了
for(var j = 0; j < array.length - 1 - i ; j++){
if(array[j] > array[j+1]){
isSort = false; //说明这一趟中还存在交换位置,还没有拍好,给isSort = false;
var temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
s++;
}
if(isSort ){
break;//如果有一趟存在没有再交换位置了,说明已经排好了,没有再进行下一轮比较的必要了,跳出外层循环
}
}
console.log('s',s); // 12 . 比较次数最少,不定次数,至少要交5次。根据原始数组的顺序。。
console.log('array',array);

你可能感兴趣的:(排序算法1——冒泡排序)