第1关:编程实现:在一个有序的数组中插入一个新的数,使得有序性不变

任务描述

本关任务:编程实现:在一个有序的数组中插入一个新的数,使得数组的有序性不变。

相关知识

为了完成本关任务,你需要掌握: 1.如何定义和初始化一个有序数组; 2.如何在有序数组中插入一个新的数,数组依旧有序; 3.如何遍历数组。

一维数组的定义

一维数组定义的一般形式: 类型名 数组名[常量表达式]; 例如: int x[6]; 它表示定义了一个整型的一维数组,数组名为x,包含有6个元素,分别是x[0]、x[1]、x[2]、x[3]、x[4]、x[5],每个元素都可以用来存放一个整数,并且元素的下标是依次递增1。

一维数组的初始化

1.从键盘输入 for (j = 0; j<n; j++) // 输入10个数据 scanf("%d", &r[j]); 2.赋值语句初始化(详见教材),如: int arr[10]={10,20,30,40,50,60,70,80,90,100};

一维数组的遍历

通俗的理解,遍历数组就是:把数组中的元素都看一遍

示例如下: for ( i=0; i<N; i++ ) printf("%d ",a[i]);

如何插入数后保持数组有序

新的数的位置有两种情况: (1)数据比所有的数都大,因此位置在当前的数组尾部; (2)数据在当前的所有数据之间。因此在算法中先将输入的数据和数组最后一个比较,如果大于,就插入数组尾部,如果小于,可以从后向前比较,也可以从前向后比较,找到位置后,将该位置后的数据依次后移一位,最后将数据放入。

编程要求

在有序数组中可以插入任意数,依旧有序

测试说明

平台会对你编写的代码进行测试: 如:原始数组元素整数序列: 10,20,30,40,50,60,70,80,90,100; 插入数:35后为: 10 20 30 35 40 50 60 70 80 90 100;

#include <stdio.h>
int main() 
{
	int a[11] = { 3,5,7,10,14,17,20,29,41,78 };
	int number, end, temp1, temp2;
	int i, j;
	scanf("%d", &number);
	end = a[9];
	if (number >= end) 
	{
		a[10] = number;
	}
	else 
	{
		for (i = 0; i < 10; i++) 
		{
			if (a[i] > number) 
			{
				temp1 = a[i];
				a[i] = number;
				for (j = i + 1; j < 11; j++) 
				{
					temp2 = a[j];
					a[j] = temp1;
					temp1 = temp2;
				}
				break;
			}
		}
	}
	for (i = 0; i < 11; i++) 
	{
		printf("  %d", a[i]);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_46069852/article/details/120943798