冒泡排序的思想
:假设有n个元素,从第一个元素开始,两两进行比较,把大的元素放大后面(第1个元素和第2个元素比,如果第1个元素大于第2个元素,就把第1个元素和第2个元素交换位置;如果第2个元素大于第1个元素,就不交换,再比较第2个元素和第3个元素…以此类推),直到排到最后一个元素,这时第一趟排序已经完成。第一趟排序完成后,最后一个元素就是最终排序结果中最大的那个元素,该元素位置已经确定,所以冒泡排序每一趟都会确定一个元素的位置。
需要注意的是
,因为每一趟排序都能确定一个元素的最终位置,在经过n-1趟排序之后,就有n-1个元素已经确定了自身的最终位置(即已经有序),因此最后剩下的一个元素就不用在进行排序了,因为它不需要和任何一个元素进行比较,它一定比起已经排好序的元素小。所以只需要n-1趟排序。
是否稳定?
稳定
算法的时间复杂度:
O
(
n
2
)
O(n^2)
O
(
n
2
)
最好的情况:
原始序列本身就有序,此时时间复杂度为O(n)
最坏的情况:
整个原始序列是逆序,此时时间复杂度为O(n^2)
实例:
原始序列:8个元素
49 38 65 97 76 13 27 49
第一趟冒泡排序过程:(共比较7次)
1)1号和2号比较,49>38,交换位置
结果:
38 49
65 97 76 13 27 49
2)2号和3号比较,49<65,不交换位置
结果:38
49 65
97 76 13 27 49
3)3号和4号比较,65<97,不交换位置
结果:38 49
65 97
76 13 27 49
4)4号和5号比较,97>76,交换位置
结果:38 49 65
76 97
13 27 49
5)5号和6号比较,97>13,交换位置
结果:38 49 65 76
13 97
27 49
6)6号和7号比较,97>27,交换位置
结果:38 49 65 76 13
27 97
49
7)7号和8号比较,97>49,交换位置
结果:38 49 65 76 13 27
49 97
js代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
function BubbleSort(arr){
//外层循环用来控制排序的趟数
for(var i = 0;i < arr.length;i++){
//内层循环用来控制每一趟排序的次数
for(var j = 0;j< arr.length - i - 1;j++){
if(arr[j] > arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
var arr1 = [49,38,65,97,76,13,27,49];
console.log(BubbleSort(arr1));
</script>
</body>
</html>
控制台输出结果: