排序算法笔记2——冒泡排序

冒泡排序是一种简单的交换排序算法,通过两两比较并交换来实现排序。它包括多次遍历元素,每次遍历将最大(或最小)的元素逐渐移到序列末尾。算法步骤涉及相邻元素的比较和交换,直到序列完全有序。冒泡排序的时间复杂度在最好、最坏和平均情况下均为O(n^2),空间复杂度为O(1),且它是稳定的排序算法。

一、啥是交换排序?

顾名思义,交换排序就是根据两个关键字值的比较结果,不满足次序要求时交换。冒泡排序和快速排序是典型的交换排序算法。其中快速排序是目前最快的排序算法

二、啥是冒泡排序?

冒泡排序是一种最简单交换排序算法,通过两两比较,逆序交换,使关键字大的像泡泡一样冒出来放在尾部。重复执行冒泡排序,最终得到有序序列。

算法步骤

1).待排序的元素存储在arr[1...n]中,首先第一个元素和第二个元素比较,逆序交换;然后第一个元素和第二个元素比较,依次类推,直到第n-1个元素和第n个元素比较完毕为止。第一趟排序结束,最大的元素在最后.

2).第二趟排序,对前n-1个元素进行冒泡排序,关键字次大的元素在n-1位置

3).重复上述过程,直到某一趟排序中没有交换元素位置,说明序列已经有序

图解

例如,用冒泡排序算法对序列{12,2,16,30}进行非递减排序

1).第一趟排序,两两比较,如果逆序则交换,如图:

1221630原始序列
2121630第一次
2121630 

 

 

 

 

代码实现

void bubblesort(int arr[],int n)//冒泡排序 
{
	int i,j,tmp,flag = 1;
	i = n - 1;
	while(i > 0 && flag)
	{
		flag = 0;
		for(j = 0 ; j < i ; ++j)
		    if(arr[j] > arr[j + 1])
		    {
		    	flag = 1;
		    	tmp = arr[j];//交换元素 
		    	arr[j] = arr[j + 1];
		    	arr[j + 1] = tmp;
			}
		--i;
	}
} 

算法复杂度

(1)时间复杂度

冒泡排序的时间复杂度和初始序列有关,可分为最好情况、最坏情况和平均情况

  • 最好情况下,待排序序列本身正序,只需一趟排序,-1次比较,为O(n)
  • 最坏情况下,待排序序列本身逆序,需n-1次排序,i-1次比较,总比较次数为\sum_{i=n}^{2}i-1=\frac{n(n-1))}{2},为O(n^2)
  • 平均情况:O(n^2)

 (2)空间复杂度

冒泡排序使用了一些辅助空间,如i,j,tmp,flag,为O(1)

(3)稳定性

冒泡排序是稳定的排序算法

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值