《啊哈,算法》-时间复杂度很高的排序-2-冒泡排序-C语言

一、问题描述

将12,35,99,18,76这5个数进行从大到小的排序。

二、思路解析及冒泡排序

上边题目要求是从大到小排序,那么也就是说越小的越靠后。
1.一趟排序(归位了12,12就是最小的)
首先比较12和35,小的要靠后,交换顺序。成为35,12,99,18,76.
继续比较12和99,继续交换,顺序成为35,99,12,18,76
继续比较12和18,继续交换,顺序成为35,99,18,12,76
继续比较12和76,继续交换,顺序成为35,99,18,76,12.
2.第二趟归位结果是99,35,76,18,12(归位的数是18)
3.第三趟归位结果是99,76,35,18,12(归位的数是35)
4.第四趟归位结果同上(归位的是76)

总结:如果有n个数进行排序,需要进行n-1趟操作,需要将n-1个数归位。

冒泡排序的基本思想:每次比较两个相邻的元素,如果它们顺序错误就把它们交换过来。

三、代码复现

#include<stdio.h>
int main(){
	int a[100],i,j,t,n;
	scanf("%d",&n);//输入一个数n,表示接下来有n个数
	for(i=1;i<=n;i++)//循环读入n个数到数组a中 
		scanf("%d",&a[i]);
	//冒泡排序的核心部分
	for(i=1;i<=n-1;i++){
		//n个数进行排序,只需要进行n-1趟
		for(j=1;j<=n-i;j++){
			//从第1位比较到最后一个尚没有归位的数,到n-i就可以了
			if(a[j]<a[j+1]){
				//比较大小,从大到小排序,把小的换在后边
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			} 
		} 
	} 
	//输出结果
	for(i=1;i<=n;i++){
		printf("%d ",a[i]);
	}
	getchar();getchar();
	return 0;
} 

在这里插入图片描述

四、时间复杂度分析

冒泡排序的一个特点就是加粗样式双重循环。
时间复杂度是O(N的平方)。

编码过程中遇到的一些问题:
忘记加空格,忘记加%号。一点小错误,但是导致首次运行不通。
还有就是底层始终都是基础中的基础。
一些学习链接

有时候会打印出-858993460,这个数字是什么意思?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值