十大排序之冒泡(C语言实现)

基础十大排序(1)———冒泡排序(c语言版本)


冒泡排序(Bubble Sort)

冒泡排序是一种简单的排序算法。它适合较少数据的排序运算,效率较低,但是是每个编程学习者入门必须掌握的算法。

  1. 什么是冒泡排序
    冒泡排序是一种交换排序,它的基本思想是将相邻的两个数据进行比较,如果反序则进行交换,直到没有反序记录时结束这个数,再到下一个数,直到所有数据排好顺序。因一个个浮出故称之为冒泡排序。双重循环时间O(n^2)

  2. 算法描述(正序)
    • 比较相邻两个数,如果第一个数比第二个数大,则两数交换。
    • 对之后的相邻元素进行同样的工作,从开始到最后一对,这样进行一次排序后,数据的最后一位会是最大值,第一次循环进行的次数为n-1
    • 之后对所有元素重复以上步骤,且以后每次循环次数为n-1-i。(n为数据个数,i为循环次数)
    • 重复以上步骤,直到排序完成为止。

  3. 代码实现

#include<stdio.h>
int main() {
	int a[10];
	int i, j, n, m;
	for (i = 0;i < 10;i++)
		scanf_s("%d", &a[i]);
	n = 1;//哨卡数
	m = 0;
		for (i = 0;i < 10 && n!=0;i++) {
			n = 0;
			for (j = 9;j >= i;j--)
				if (a[j] <= a[j - 1]) {
					m = a[j];
					a[j] = a[j - 1];
					a[j - 1] = m;
					n++;
				}
		}
	for (i = 0;i < 10;i++)
		printf_s("%d\n", a[i]);
	return 0;
}

  1. 动态描述
    动态描述
  2. 冒泡排序复杂度分析
    分析一下它的时间复杂度。当数据已经正序排好时,那么可以判断出就是n-1次的比较,没有数据交换,此时时间复杂度为O(n)。当待排序是逆序的情况,此时需要比较 ∑ i = 2 n i − 1 \displaystyle\sum_{i=2}^{n} i-1 i=2ni1=1+2+3+…+(n-1)= n ( n − 1 ) 2 \frac{n(n-1)}{2} 2n(n1) 次,此时时间复杂度为 O( n 2 n^2 n2) 。平均时间复杂度为O( n 2 n^2 n2)

文章有错的话欢迎指正,第一次写博客难免语言会有不通顺或者漏洞,各位看官多多包涵。大家相互交流,祝大家新年快乐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值