【TSOJ课程】10 1041 简单排序2

课程29_10 1041 简单排序2


题目:

题目描述
题目描述:

给定 20 个无序的整数,请将其按照从小到大的顺序排序并输出

输入描述:

输入仅一行,其中包含 20 个整数,中间用空格分开

输出描述:

输出为 20 行,每行一个整数,整个输出形成一个从小到大排列的竖式

样例输入:

9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4-5 -6 -7 -8 -9 -10

样例输出:

-10
-9
-8
-7
-6
-5
-4
-3
-2
-1
0
1
2
3
4
5
6
7
8
9


解析:

好久没来写题解了,捡起来再写写。

题如其名,比较简单的一题,给20个数字排序。因为题目已经告诉你一组只有20个数据,所以我们用最简单的冒泡排序就可以了。

如果还有同学不知道冒泡排序是什么的,我可以再解释一次:

冒泡排序是最最俭朴的比较排序了。所谓比较排序,就是基于比较两个数字(一般是临位,就是紧挨着的两个)的大小,然后以此来排序的算法。

冒泡排序的思路大概是这样的:(我们用d(n)表示第n个数字)

首先比较d(1)d(2),如果d(1)>d(2),就交换这两个数字,那么此时d(1)一定小于d(2)。

第一次比对

然后我们再比较d(2)和d(3),如果d(2)>d(3),就交换他们,那么此时d(2)一定小于d(3),并且d(3)一定是前三个数字里最大的

第二次比对

以此类推,我们一直比较到数组结尾的地方,那么此时,数组的最后一个数字一定是最大的。在这个过程中,目前数组最大的数字逐步的“冒”到了上面,就像是气泡冒了上去一样,这也是这个算法的名字由来。

此时,我们已经完成了冒泡排序的第一个循环。

如你所见,我们进行完第一个循环以后,就有一个数字的位置确定了,也就是最后一个数字。而其他的数字还没有确定下来。虽然在过程中,d(3)>d(2),d(2)>d(1),但是循环后,d(2)不一定大于d(1),因为在这个过程中,他们的数据可能发生了变化(因为交换)。

那么我们从第一个开始,到倒数第二个(因为倒数第一个已经排好了),这样倒数第二个也排好了,以此类推,直到所有数据都排序好。


解题:

用一个数组来管理会很方便,然后冒泡即可,注意内层循环的次数是20-i-1,因为每循环一次,就有一个数字被排序好。

参考代码:

// TSOJ-1041 简单排序2
#include <iostream>
using namespace std;

int main()
{
	int n[20],temp;
	for(int i=0;i<20;i++)
		cin>>n[i];
	for(int i=0;i<20;i++){
		for(int j=0;j<20-i-1;j++){
			if(n[j]>n[j+1]){
				temp = n[j];
				n[j] = n[j+1];
				n[j+1] = temp;
			}
		}
	}
	for(int i=0;i<20;i++)
		cout<<n[i]<<endl;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值