详解冒泡排序--适用于初学者,包会

1. 冒泡排序的基本思想就是: 每次都比较两个相邻的元素,如果他们的顺序错误就把他们的位置调换过来
2.例如 5 9 7 6 1 8 13 4
他们每次都是两两比较,所以每一轮要比较n-i次(升续排列每次都会确定一个剩余元素中最大的一个;反之,每次都会确定一个剩余元素中最大的一个)。总共有n个元素要比较n-1轮;(这个都理解吧,不理解的可以自己每两个比较一下试试)。
下面默认升续
第一轮:
i=1,比较8-1=7次;先比较5和9,他们的顺序没有错误,不动;
再比较9和7,发现顺序错误,把9和7的位置交换,这样前三个数字的顺序就变成了5,7,9;
接着9和6比较,发现顺序错误,把9和6的位置交换,这样前三个数字的顺序就变成了5,7,6,9;
下面依次类推。。最后的顺序就变成了5,7,6,1,8,9,4,13;确定了序列中的最大元素。
第二轮;
i=2,比较8-2=6次;和第一轮一样,依次两两比较,最后确定序列第二大的9的位置。
。。。。。
最后一轮:确定了序列的升续排列1,4,5,6,7,8,9,13;

下面来张图例(百度而来)

模板代码

#include <stdio.h>
#include <string.h>

using namespace std;
int main()
{
	int a[1000];
	int i, j, n;
	while(~scanf("%d", &n))
	{
		memset(a, 0, sizeof(a));
		for(i = 1; i <= n; i++)
			scanf("%d", a + i);
		for(i = 1; i <= n-1; i++)//比较n-1趟 
			for(j = 1; j <= n-i; j++)//每次比较相邻的两个元素,比较前n-i次 
			{
				if(a[j] < a[j+1])//小于号从大到小排序 ,大于号从小到大排序 
				{
					int t = a[j];//数组中的值为变量j
					a[j] = a[j + 1];
					a[j + 1] = t;
				}
			}
			
		for(i = 1; i <= n; i++)
			printf("%d ", a[i]);
	}
	return 0;
 } 

纯手打,学明白的,点个赞奖励一下啦!!
不是很理解的,可以给我留言,我看到的话会回复的!
共同学习,有什么错误,希望一起交流,谢谢!
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值