22、在有序數組中插入一個數值,數組仍然有序——數組


插入數據,有序數組仍然有序

方法一:

在一個數組中完成的操作
代碼實現:
/*
	2017年6月19日16:31:52
	功能:向有序的數組中插入一個數據,但是數據仍然有序
*/
#include<stdio.h> 
#define N 5

void sort(int a[],int num)
{
 	int i,j,temp1,temp2;
	
 	int end = a[N-2];								//a[N-2]是原數組的最大一個數據

	if(num >= end)									//如果插入的數據比原數組中的最大數據還大則插入到數組最后面
  		a[N-1] = num;
 	else											//否則就是在數組的第一位置或者中間位置插入
 	{
 	    for(i = 0; i < N-1; i++)
   		 if(a[i] > num)								//判斷插入數值與數組中的元素的大小						
   		{
   			 temp1 = a[i];							//先保存當前位置的值
    		a[i] = num;								//插入數值
   			 for(j = i+1; j < N; j++)				//此處的for循環是對數據進行移位操作
    			{									//以下三行將插入位置之后的數依次向后移動
     				temp2 = a[j];
    				a[j] = temp1;
     				temp1 = temp2;
        		}
  			 break;									//找到合適的位置后就終止外層循環
   		}
	 }
}

int main()
{
 	int a[N]={5,8,10,20};
 	int i=0;
 	int num;

 	printf("原數組的表示形式:");
 	for(i=0;a[i]!='\0';i++)							//a[i]!='\0'注意此形式的寫法
 		printf("%d\t",a[i]);

 	printf("\n輸入要插入的數:");
 	scanf("%d",&num);

 	sort(a,num);

 	printf("新數組的表示形式:");
 	for(i=0;i<N;i++)
		printf("%d\t",a[i]);

 	printf("\n");

 	return 0;
} 



/*
	總結:
	在VC++6.0中的顯示結果:
	----------------------------------------------------------------
	原數組的表示形式:5     8       10      20
	輸入要插入的數:15
	新數組的表示形式:5     8       10      15      20
	----------------------------------------------------------------
	此方法是在一個數組中完成的移動操作
*/

  

方法二:

在新的數組中存儲,並且完成操作
代碼實現:
/*
	2017年6月19日15:03:14
	功能:在有序的數組中插入一個數據之后,數組仍然是有序的
*/
#include"stdio.h"
#define N 10
#define M 9
int main()
{
	int a[M] = {2,3,4,5,6,7,8,9,9};
	int b[N]; 
	int i, j, num;
	printf("please input a number: ");
	scanf("%d",&num);
	if(num < a[0])							//找出插入的數據在數組中的下標位置
	{
		j = 0;
	}
	else if(num > a[M-1])
	{
		j = M;
	}
	else
	{
		for(i = 0; i < M; i++)
		{
			if( num == a[i])
			{
				j = i;
			}
			if( num > a[i]&& num < a[i+1])
			{
				j = i + 1;
			}	
		}
	}
	for( i = 0; i < N;i++)
	{
		if(i < j)
		{
			b[i] = a[i];
		}
		if(i == j)
		{
			b[i] = num;
		}
		if(i > j)
		{
			b[i] = a[i-1];
		}			
	}
	printf("The new array is :");
	printf("\n" );
	for(i = 0; i < N; i++)
	{
		printf("%d\t",b[i]);
		
	}
	printf("\n" );
	return 0;
}
/*
	總結:
	在VC++6.0中顯示的結果為:
	————————————————————————————————————————
	please input a number: 1
	The new array is :
	1       2       3       4       5       6       7       8       9       9

	please input a number: 4
	The new array is :
	2       3       4       4       5       6       7       8       9       9
	————————————————————————————————————————
	采用一個新的數組進行存儲
*/

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM