从零开始学算法(一)冒泡排序

冒泡排序

因为在学前端,代码是Javascript语言写的

算法介绍

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

通过循环遍历元素列来比较两个相邻的元素,然后交换大小顺序错误的两个元素的位置,直到不需要交换元素,也表明排序完成。

因为在排序的过程中大的元素会慢慢被换到最后像气泡浮到水面所以称为“冒泡排序”。

算法原理

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。(每一轮会把最大的放到最后一位)。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

算法简单记忆说明

3,5,9,6,2,1
0,1,2,3,4,5 (位置)
第一遍:(0~n-1)
3<5不交换
5<9不交换
9>6交换:3,5,6,9,2,1
9>2交换:3,5,6,2,9,1
9>1交换:3,5,6,2,1,9
第一遍把最大的数9换到最后一位

第二遍:(0~n-2)
3<5不交换
5<6不交换
6>2交换:3,5,2,6,1,9
6>1交换:3,5,2,1,6,9
第二遍把最大的数6换到n-2的位置上(即该组数的最后一位)

第三遍:(0~n-3)
以此类推

最终排好序:1,2,3,5,6,9

算法复杂度和稳定性

冒泡排序的时间复杂度是O(N2

假设被排序的数列中有N个数。遍历一趟的时间复杂度是O(N),需要遍历N-1次。所以时间复杂度是O(N2

冒泡排序是稳定排序算法

算法稳定性的定义: 假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。则这个排序算法是稳定的。

如何理解?举个例子:
2,1,3,(2),5,4,((2)),6
第一遍:1,2,(2),3,4,((2)),5,6
第二遍:1,2,(2),3,((2)),4,5,6
第三遍:1,2,(2),((2)),3,4,5,6
排序前三个2的顺序和排序后三个2的顺序相同

代码实现

var Bubblearr = [1,5,7,3,6,4,8,13,2];
function BubbleSort(arr){
   if(arr == null || arr.length<2){return;}
   for(var end=arr.length-1;end>0;end--){
   	for(var i=0;i<end;i++){
   		if(arr[i]>arr[i+1]){
   			swap(arr,i,i+1);
   		}
   	}
   }
   return arr;
}

function swap(arr,i,j){
	arr[i] = arr[i]^arr[j];
	arr[j] = arr[i]^arr[j];
	arr[i] = arr[i]^arr[j];
}

BubbleSort(Bubblearr);
console.log(Bubblearr);

输出结果:1,2,3,4,5,6,7,8,13

猜你喜欢

转载自blog.csdn.net/weixin_42507756/article/details/83993151
今日推荐