首页 > 其他分享 >浙江理工大学入队200题——10E

浙江理工大学入队200题——10E

时间:2022-10-29 10:11:07浏览次数:94  
标签:count 200 输出 int 插入排序 10E -- 入队 测试

问题 E: 零基础学C/C++114——直接插入排序

题目描述

编一C程序,该程序可以测试多个测试组,每个测试组它能读入一串整数并对它们进行从小到大直接插入排序,同时输出排序时对这些整数进行比较的总次数(输入整数时,相邻的两个用空格隔开,整数个数<2000)。

输入

第一行先输入测试组数T 然后是T个测试组, 每个测试组先输入整数个数N(2<=n<2000) 然后输入1行,包含N个整数,每2个整数之间用空格隔开

输出

对每个测试组输出2行, 第1行输出比较次数 第2行输出排序后的数,2个数之间用一个空格隔开

样例输入 Copy

1
4
3 2 4 5

样例输出 Copy

3
2 3 4 5

题解

本题考查插入排序,思路是假设前面n个数有序,向内插入一项元素使插入后的数组仍然保持有序。
下面是比较次数的分析 例子:3 2 4 5
对于第一个数3有序 3 2 4 5 将2与3比较 2<3,查找3前面的数,变成 2 3(此时j的下标为-1,j!=i-1) count=1;
第二次4与3比较,4>3 变成2 3 4 count=2;
第三次5与4比较,5>4 变成2 3 4 5 count=3;
插入排序代码可视化网站https://visualgo.net/zh

##代码(AC)
点击查看代码
#include <stdio.h>
int main()
{
	int t;
	scanf("%d",&t);
	while (t--)
	{
		int n;
		scanf("%d",&n);
		int a[n];
		for(int i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
		}
		int count=0;
		for(int i=1;i<n;i++)
		{
                        int j
			for(j=i-1;j>=0;j--)
			{
				count++; 
				if(a[j]<=a[i])
				break;
			}
			if(j!=i-1)//此时j<i,但不清楚有多少项大于m的数在a[i]后面,每次把大于m的数往前移,在a[j+1]处插入,保持升序
			{
				int temp=a[i];
				for(int k=i-1;k>j;k--)
				{
					a[k+1]=a[k];
				}
				a[j+1]=temp;//由于上面的j--,可以判断出j+1处放原值
			}
		}
		printf("%d\n",count);
		for(int i=0;i<n;i++)
		{
			printf("%d",a[i]);
			if(i<n) printf(" ");
		}
		printf("\n");
	}
	return 0;
}

标签:count,200,输出,int,插入排序,10E,--,入队,测试
From: https://www.cnblogs.com/codeshany/p/zstu_200_10E.html

相关文章

  • 浙江理工大学入队200题——10D
    问题D:零基础学C/C++113——并列排名题目描述在我们参加的各种竞赛中,允许并列的排名方式是经常遇到的。例如有四名选手的成绩分别为50、80、50、30分,则80分的选手为第......
  • 浙江理工大学入队200题——9O
    问题O:零基础学C/C++109——省赛归来题目描述一年一度的省赛刚结束,我校ACM队员在省赛中有了新的突破,获得了一银两铜一优秀组织奖。尽管我们的最牛的队伍zstu_Zeus是银......
  • 浙江理工大学入队200题——9K
    问题K:零基础学C/C++100——开灯问题题目描述计算中心有8个机房,每个机房有n台电脑。每台电脑都有一个编号,比如8号机房编号就为H1到Hn,我们有时又称为H1为1号机器,H2为2号......
  • 浙江理工大学入队200题——9M
    问题M:零基础学C/C++106——进制转换题目描述输入一个十进制数N,将它转换成R进制数输出。输入输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<......
  • 浙江理工大学入队200题——9J
    问题J:零基础学C/C++99——青年歌手大奖赛_评委会打分题目描述青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请......
  • 浙江理工大学入队oj-----9I
    问题I:零基础学C/C++98——打印所有低于平均分的分数题目描述输入n个成绩,打印出所有低于平均分的分数(注意:ave=s/n中s为float或ave=(float)s/n)。输入多个测试......
  • 浙江理工大学入队oj-----9H
    问题H:零基础学C/C++97——数组中插入一个数题目描述给定有序数组(从小到大),再给你一个数,要求插入该数到数组中并保持顺序输入多组测试,每组第一行输入一个整数n,然后是......
  • 浙江理工大学入队oj-----9g
    问题G:零基础学C/C++96——数组中删数II题目描述在给定的数组中删除数输入多组测试,每组第一行输入1个整数n(n<20),然后是n个整数第二行输入1个整数m输出删除在第......
  • 浙江理工大学入队oj-----9D
    问题D:零基础学C/C++93——Fibonacci数列题目描述斐波那契数列(Fibonaccisequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(LeonardodaFibonacci)以兔子繁殖为例......
  • 浙江理工大学入队oj-----9b
    问题B:零基础学C/C++91——逆序输出题目描述上题我们做了数组,按照数组输入的次序输出,如果我们按照输入相反的顺序输出,你会不会呢?输入多组测试数据。第一行输入一......