冒泡排序

1. 冒泡排序

冒泡排序故名思意就是水里面的泡泡总是大的更快的浮到达水面,冒泡排序的本质就是交换,即每次都是通过交换的方式把当前的剩余元素的最大值排序到一端

例如:

​ 现在有一个数组a,分别为a[0]=3,a[1]=4,a[2]=1,a[3]=8,a[4]=0,要求把他们按升序排列

分析a数组得出其初始序列{3,4,1,8,0}

​ 第一趟排序:

​ a[0]与a[1]比较 a[0]比a[1]小所以a[0]与a[1]不交换顺序现在a的顺序为了{3,4,1,8,0}

​ a[1]与a[2]比较a[1]比a[2]大所以a[1]与a[2]交换顺序现在a的顺序变为了{3,1,4,8,0}

​ a[2]与a[3]比较a[2]比a[3]小所以a[2]与a[3]不交换顺序现在a的顺序变为了{3,1,4,8,0}

a[3]与a[4]比较a[3]比a[4]大所以a[3]与a[4]交换顺序现在a的顺序变为了{3,1,4,0,8}

即第一趟排序完成此时找出最大数为8并把8排至a[4]位置即即未排好的序列的最后,排序后的顺序为{3,1,4,0,8}此时不需要在比较a[3]与a[4]的大小只需要对a[0],a[1],a[2],a[3]进行排序 第二次比较次数减1为3次

​ 第二趟排序:

​ a[0]与a[1]比较 a[0]比a[1]小所以a[0]与a[1]不交换顺序现在a的顺序为了{3,4,1,0,8}

​ a[1]与a[2]比较a[1]比a[2]小所以a[1]与a[2]不交换顺序现在a的顺序变为了{3,1,4,0,8}

​ a[2]与a[3]比较a[2]比a[3]大所以a[2]与a[3]交换顺序现在a的顺序变为了{3,1,0,4,8}

即第二趟排序完成此时找出最大数为4并把4排至a[3]位置即未排好的序列的最后,排序后的顺序为{3,1,0,4,8}此时不需要在比较a[2]与a[3]的大小只需要对a[0],a[1],a[2],进行排序 第三次比较次数减1为2次

​ 第三趟排序:

​ a[0]与a[1]比较 a[0]比a[1]大所以a[0]与a[1]交换顺序现在a的顺序为了{1,3,0,4,8}

​ a[1]与a[2]比较a[1]比a[2]大所以a[1]与a[2]交换顺序现在a的顺序变为了{1,0,3,4,8}

即第三趟排序完成此时找出最大数为3并把3排至a[2]位置即未排好的序列的最后,排序后的顺序为{1,0,3,4,8}此时不需要在比较a[1]与a[2]的大小只需要对a[0],a[1],a[2],进行排序 第三次比较次数减1为2次

​ 第四趟排序:

​ a[0]与a[1]比较 a[0]比a[1]大所以a[0]与a[1]交换顺序现在a的顺序变为了{0,1,3,4,8}

即排序完成

冒泡排序的时间复杂度为O(n^2)
空间复杂度:O(1)
冒泡排序是一种比较稳定的排序方法

代码如下:

int a[4]={34180};
int flag = 1;
for (int i = 4; i > 0 && flag == 1; i + +){
	flag == 0;
	for (int j = 0, j < 4 - i, j++){
		if (a[j] > a[j + 1]){
			int max;
			max = a[i - 1];
			a[j - 1] = a[j];
			a[j] = max;
			flag == 1;
		}
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厭氧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值