C语言:在排好序的数列中插入一个新的数,原来这么简单?

题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

代码解析如下:

#include<stdio.h>
int main()
{
    //首先定义两个数组,一个存放原始序列,另一个存放加入新数之后的新序列。
	int t[10],s[11];       
	int i,j,k;
	

	printf("请输入十个有序数:");
	for(i=0;i<10;i++){
		scanf("%d",&t[i]);   //键盘输入十个有序数列。 
	}
	
    /* 把换行符去掉,为了进行第二次输入。如果没有getchar(),有些编译器无法二次输入。
       如果你的编译器不需要它也能二次输入,则可以去掉。*/
	getchar();       
	
	printf("请输入要加入的数:");
	scanf("%d",&k);     //输入要加入的数。 
	
	for(i=0;i<9;i++)
	{

        //首先要确定这个数的大小在哪个范围。
		if((k>=t[i]&&k<=t[i+1])||(k<=t[i]&&k>=t[i+1]))  
		{
        //确定之后,记录这个数的范围的较小值,如 2<k<4 则  记录 j=2
			j=i;     
		}
	}
	
	for(i=0;i<11;i++){

		if(i<j){
            //如果 i 在 j 之前,则直接将 t 数组中的数对应放到 s 数组中。
			s[i]=t[i];     
		}

		else if(i==j){
            //如果 i 等于 j ,还是直接将 t 数组中的数对应放到 s 数组中。
			s[i]=t[i];  
            //但 i+1 不能直接对应,而是将加入的值放入 i+1 中。
			s[i+1]=k;      
		}

		else{
            /*由于多加入了一个数,所以之后的数要将 t 数组的数放到 s 数组的下一位。
            也就是 t[i] 对应  s[i+1] */
			s[i+1]=t[i]; 
		}

	}
	
	printf("插入后的结果为:");
	for(i=0;i<11;i++){
		printf("%d ",s[i]);  //最后打印新数组s 
	}
	printf("n");
	
	return 0;
 } 

完整的代码为:准备

 

#include<stdio.h>
int main()
{
	int t[10],s[11];      
	int i,j,k;
	
	printf("请输入十个有序数:");
	for(i=0;i<10;i++){
		scanf("%d",&t[i]);    
	}
	
	printf("请输入要加入的数:");
	scanf("%d",&k);     
	
	for(i=0;i<9;i++)
	{
		if((k>=t[i]&&k<=t[i+1])||(k<=t[i]&&k>=t[i+1]))  
		{
			j=i;   
		}
	}
	
	for(i=0;i<11;i++)
    {
		if(i<j)
        {
			s[i]=t[i];    
		}
		else if(i==j)
        {
			s[i]=t[i];     
			s[i+1]=k;  
		}
		else
        {
			s[i+1]=t[i];  
		}
	 }
	
	printf("插入后的结果为:");
	for(i=0;i<11;i++){
		printf("%d ",s[i]); 
	}

	printf("n");
	return 0;
 } 

正序结果为:

 反序结果为:

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>