起泡排序(冒泡排序)

起泡排序(冒泡排序)

摘自书本:我们不难知道,在有序序列中每一对相邻元素都是顺序的,既对任意1 <= i <= n,都有A[i-1] <= A[i];反之,所有所有相邻元素均顺序的序列,也必然整体有序。

起泡排序思想:通过不断改变局部的有序性实现整体的有序,从前往后扫描每一对相邻元素,一旦发现有逆序随即交换二者元素的位置。对于长度为n的序列,共需要做n-1次比较和不超过n-1次交换,这一过程称作一趟扫描过程。而一趟扫描,整个序列并未达到整体有序,故需要进行多次扫描,交换直到在序列中不含有任何逆序的相邻元素。排序过程中,所有元素向各自的最终位置亦步亦趋的移动过程,犹如气泡在水中上下沉浮,因此称作起泡排序(bubblesort)。

算法原理(图解):
1.先从最后一个元素开始,与前一个相比较,若比前一个小,则交换位置(若比前一个大,则从倒数第二个元素继续,以此类推)。

2.交换后继续定位该元素,与前一个比较,直到比前一个大。
请添加图片描述

3.给原序列倒数第一个元素找好归宿后,再从后往前扫描方法同第1步。
请添加图片描述

算法实现(代码):

void bubblesort (int A[], int n) { 
	bool sorted = false;//整体排序标志,首先假定尚未排序
	while(!sorted) {//在尚未完成全局排序前,逐趟进行扫描交换
		sorted = true;//假定已经排好序
		for(int i=n; i>=1; i--) {
			if(A[i-1] > A[i]){
				swap (A[i-1], A[i]);//交换扫描
				sorted = false;//因整体排序不能保证,需要清除排序标志
			}
		}
		n--;//至此末元素必然就位,故可以缩短排序序列的有效长度
	}
 } 
 //借助布尔类型的sorted,可及时提前退出,而不致总是蛮力地做n-1趟交换扫描

时间复杂度:O(n²)

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值