冒泡排序

排序算法:桶排序、冒泡排序、快速排序

冒泡排序

冒泡排序的基本思想:每次比较相邻的两个数,如果符合判断条件就将这两个元素的位置交换。
如果有n个数要进行排序,那么只需要将n-1个数放到正确的位置上,整个数列的顺序就排好了,也就是要进行n-1趟操作,每趟都是从第一个数开始与它相邻的数比较大小,如果要从小到大排序,那么每比较完一次,就将较大的数往后挪一位,然后再继续比较下面两个相邻的数的大小,重复此操作,直到只有最后一个尚未归位的数,而已经归位的数则无需再进行比较了。
例如:要对35 99 18 12 76这五个数从大到小排序。
这个数列一共有5个数,因此进行4趟操作就可以将数列排序好,接下来开始第一趟比较。
第一趟
第一次 99 35 18 12 76
第二次99 35 18 12 76
第三次99 35 18 12 76
第四次99 35 18 76 12

第二趟
第一次99 35 18 76 12
第二次99 35 18 76 12
第三次99 35 76 18 12
第四次99 35 76 18 12
因为第二个数比后面的数大,所以不需要进行交换。开始第三趟操作

第三趟
第一次99 35 76 18 12
第二次99 76 35 18 12
第三次99 76 35 18 12
第四次99 76 35 18 12
第三趟因为在第二次时已经将较大数与较小数位置交换完毕,所以第三和第四次的顺序没有发生改变,但任然进行了比较。
第四趟(从第四个数开始比较)
第一次99 76 35 18 12
第二次99 76 35 18 12
第三次99 76 35 18 12
第四次99 76 35 18 12
代码如下

#include <stdio.h>

int main()
{
	int a[100];
	int n,num;
	int i,j;
	scanf("%d",&n);
	for(i = 1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	//冒泡排序的核心部分
	for(i = 1;i<=n-1;i++){ //n个数排序只需进行n-1趟操作
		for(j = 1;j<=n-i;j++){ //从第一个数开始比较直到最后一个没有归位的数
			if(a[j]<a[j+1]){  //比较大小并交换位置
				num = a[j];
				a[j] = a[j+1];
				a[j+1] = num;
			}
		}
	}
	for(i = 1;i<=n;i++)
		printf("%d ",a[i]);;
	
	return 0;
}

冒泡排序的核心部分是双重for循环,可以看出冒泡排序的时间复杂度是O(N2),这是一个非常高的时间复杂度,假如计算机每秒可以运行10亿次,那么对一亿个数进行排序,桶排序只需要0.1秒,而冒泡排序则需要一千万秒,所以说冒泡排序虽然节省空间,但非常浪费时间。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值