个人主页:爱吃炫迈
系列专栏:数据结构与算法
座右铭:快给我点赞赞
冒泡排序(Bubble Sort)***,是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列表,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
只说可能有点不好理解,所以我们上动图,更形象的演示冒泡排序规则(向了解的更细致请往下看!)
冒泡排序算法的原理如下:
举个栗子:用冒泡排序算法实现数组a = [2,3,1]的升序排序
开始排序(比赛开始咯~):
第一轮比赛结束!下面进行第二轮!
此时就剩1了,没有人在和它进行比较了,比赛结束!
总结:3个数进行比较时,我们进行了2趟排序(即2轮比赛):
第1趟排序,我们进行了2次比较
第2趟排序,我们进行了1次比较
推理:n个数进行比较时,我们进行了(n-1)趟排序(即(n-1)轮比赛)因为最后总是剩下一个数不需要在进行一趟排序(冒泡)
第1趟排序,我们进行了(n-1)次比较
第2趟排序,我们进行了(n-1) -1次比较因为第一趟后选出的最大值不在参与排序,所以第二趟只剩n-1个数参与排序,而n-1个数需要进行(n-1)-1次比较
第3趟排序,我们进行了(n-2)-1次比较
·····
第i趟排序,我们进行了(n-i)次比较 因为(n-(i-1))-1=n-i
结论:
- n个数进行比较时,我们进行了(n-1)趟排序
- 第i趟排序,我们进行了(n-i)次比较
所以现在我们可以明明白白,清清楚楚(···没词儿了···)的写出代码啦:
function bubbleSort(arr) {
var i, j;
//定义一个临时变量,用于交换时存放数据
var tempExchangVal;
// 外层循环表示冒泡排序的趟数
// 内层循环表示每趟排序比较的次数
for (i = 0; i < arr.length - 1; i++) {
for (j = 0; j < arr.length - 1 - i; j++) {
//交换相邻的两个顺序错误的数字
if (arr[j] > arr[j + 1]) {
tempExchangVal = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tempExchangVal;
}
}
}
return arr;
}
var arr = [2, 3, 1];
var arrSorted = bubbleSort(arr);
console.log(arrSorted); //输出1,2,3
你以为到这里就结束了吗,nonono,后续我还会补充有关冒泡排序的例题,敬请期待吧~~
最后希望我的这篇文章对你学习冒泡排序有所帮助,有问题欢迎在评论区提出!