初级冒泡:
代码
var changeCount = 0;
function changePos(i, j, list) {
console.log(changeCount++);
var temp = null;
temp = list[i];
list[i] = list[j];
list[j] = temp;
return list;
}
function bubbleSort(list) {
var temp = null;
// var count = 0;
for (var i = 0, len = list.length; i < len - 1; i++) {
for (var j = i + 1; j < len; j++) {
// console.log(count++);
if (list[i] > list[j]) {
changePos(i, j, list);
}
}
}
return list;
}
console.log(bubbleSort([3, 5, 7, 9, 4, 2, 1, 0, 11, 45, 37, 88, 6]));
原理
注意:
这本质上 不是冒泡,他就是简单的交换
让每一个关键字和后面每一个关键字比较, 如果大 则交换
这样第一顺位,关键字 在一次循环之后 就变成了最小值了
真正的冒泡
两两比较相邻记录
小时候 排队 ,老师总会让个子小的往前站
他又吃不准 谁个子高 就挨着站比一比呗 ,en ? 不挨着站, 比不出来吗
说实话 没感觉前后两种算法 有啥区别
代码
var changeCount=0
function changePos(i, j, list) {
console.log(changeCount++);
var temp = null;
temp = list[i];
list[i] = list[j];
list[j] = temp;
return list;
}
function bubbleSort(list = []) {
var temp = null;
// var count = 0;
for (var i = 0, len = list.length; i < len; i++) {
for (var j = len - 2; j >= i; j--) {
// console.log(count++);
if (list[j] > list[j + 1]) {
changePos(j, j+1, list);
}
}
}
return list;
}
// console.log(bubbleSort([9,1,5,8,3,7,4,6,2]));
console.log(bubbleSort([3, 5, 7, 9, 4, 2, 1, 0, 11, 45, 37, 88, 6]));
优势在哪里 ?
比方说 第一轮比较 ,我们是不是 就把2 提前到了,前面的位置 ,第三位
FQ:
那意思是 能减少换位次数 ??
1.比较次数 是不是不会减少
是的,比较次数没变 老哥
2.那换位次数 会不会较少
他妈的 也没有变 那 ???
3.那他有啥几把用 ?
我特么哪里知道 ...
数字 如同气泡一样慢慢的往上浮,有点像冒泡了啊
冒泡改进
交换次数 可能是不好修改了
但是 是不是可以 减少 比较次数 ,
你都冒泡了 肯定可能在未比完的某个时刻,已经排好序了,之后的比较都是无意义的
var changeCount=0
function changePos(i, j, list) {
// console.log(changeCount++);
var temp = null;
temp = list[i];
list[i] = list[j];
list[j] = temp;
return list;
}
function bubbleSort(list = []) {
var temp = null;
// var count = 0;
var flag=true
for (var i = 0, len = list.length; i < len && flag; i++) {
flag=false
console.log(flag , '标识 外层次数',list);
for (var j = len - 2; j >= i; j--) {
// console.log(count++);
/* 没有可以交换的数据了 的意思是, 排序完成了 不做无意义比较了 */
if (list[j] > list[j + 1]) {
changePos(j, j+1, list);
flag=true
}
}
}
return list;
}
// console.log(bubbleSort([9,1,5,8,3,7,4,6,2]));
console.log(bubbleSort([3, 5, 7, 9, 4, 2, 1, 0, 11, 45, 37, 88, 6]));
冒泡排序复杂度分析:
n 个数据
比较次数 n-1 , n-2, ...1 ,数列求和 n(n-1)/2
时间复杂度
O(n的平方) 平方咋写 ?? ..