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

本文深入讲解了冒泡排序算法的基本原理、操作流程及其在JavaScript中的实现。通过具体实例,展示了冒泡排序如何通过反复比较和交换相邻元素,将数据按大小顺序排列。文章还讨论了冒泡排序的时间复杂度为O(N^2)以及其稳定性,并提供了代码示例。
摘要由CSDN通过智能技术生成

冒泡排序

因为在学前端,代码是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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值