c语言学习(第二周总结)

学习内容如下:

1.冒泡排序

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

主要作用是使一些数按照一定的规律排序;

下面是我在oj上面遇到的题目:

题目描述

萝卜上次已经说过要给各位同学出一道冒泡排序,那么此题就以冒泡排序为主吧,可是实验室的学长学姐觉得学弟学妹们都很厉害,所以就加了各种各样的条件,最 终萝卜还是选择加一些条件,比如:让你直接排序输出结果就体现不出冒泡排序了。所以萝卜决定必须要用冒泡排序才能做出来的题目才叫冒泡排序的题目嘛?所以 这里只需要你在使用冒泡排序的时候统计交换的次数,在定义一个规则,如果存在相同的数,那么出现较早的那个数就排在后面。请帮萝卜解决这个问题吧。

输入

只有一组数据。

第一行一个n。(n<100)

接下来有n个数,表示要排序的数(不超过100)。

输出

输出交换的次数。

样例输入 
3
1 2 2
样例输出 
1
提示

相同的数出现早,即下标小的那个数。

比如样例:

数字1 2 2

下标0 1 2

本题其实不仅仅考察的是冒泡排序,因为题目要求相同的数先出现要放后面,这也是题目真正的难点;

解题思路:

首先只考虑前一个元素是否大于后一个元素,如果是则将它们交换,并且将定义的一个变量:x加1代表交换的次数;然后再考虑元素相等的进行交换每交换一次x加1;最后打印x的值代表交换的次数;

以下是我写的代码:

首先是输入n,代表n个数,然后循环输入n个数存到数组a里面,第一次循环只考虑元素间不相等的情况,每排序一次让x加1;第二次循环考虑元素相等的情况,使用的是选择排序的方法。

2.直接插入排序

基本思想:从序列的第2个数开始往前面扫找到一个位置,前面的数比自己小后面的数比自己大的数然后插入,让后面的数往后移一位。然后从第3个数开始往前面扫,以此类推。

oj上的题目:

题目描述

利用直接插入排序算法实现线性表的排序。要求输出第k趟排序的结果。例如原来线性表为:26,12,25,4,36,15,21,第一趟直接排序排序结果为: 12,26,25,4,36,15,21,第二趟直接插入排序结果为: 12,25,26, 4,36,15,21。

输入

输入包含若干个测试用例,第一行为测试用例个数。每个测试用例占3行,第一个为元素个数n(1<=n<=1000),第二行为n个元素值(整数),即需要排序的元素个数,第三行为k(1<=k<=n-1),即要求的第k趟排序结果。

输出

对每一测试用例,用一行输出第k趟排序结果,用空格隔开。

样例输入 
1
5
2 4 1 9 7
3
样例输出 
1 2 4 9 7

解题思路 

输入k值后,利用for循环控制插入的次数,排序后打印排序的结果。

我的代码如下:

输入T值代表T个测试用例,在每个测试用例中输入n的值代表有n个元素,循环输入n个数存到a数组里面,然后输入K的值用来控制插入的次数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

3分人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值