zoukankan      html  css  js  c++  java
  • 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]!='';i++)							//a[i]!=''注意此形式的写法
     		printf("%d	",a[i]);
    
     	printf("
    输入要插入的数:");
     	scanf("%d",&num);
    
     	sort(a,num);
    
     	printf("新数组的表示形式:");
     	for(i=0;i<N;i++)
    		printf("%d	",a[i]);
    
     	printf("
    ");
    
     	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("
    " );
    	for(i = 0; i < N; i++)
    	{
    		printf("%d	",b[i]);
    		
    	}
    	printf("
    " );
    	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
    	————————————————————————————————————————
    	采用一个新的数组进行存储
    */
    

      

  • 相关阅读:
    简单的模板解析函数
    HTML通过事件传递参数到js 二 event
    HTML通过事件传递参数到js一
    通过this获取当前点击选项相关数据
    LeetCode 20. 有效的括号(Valid Parentheses)
    LeetCode 459. 重复的子字符串(Repeated Substring Pattern)
    LeetCode 14. 最长公共前缀(Longest Common Prefix)
    LeetCode 168. Excel表列名称(Excel Sheet Column Title)
    LeetCode 171. Excel表列序号(Excel Sheet Column Number) 22
    LeetCode 665. 非递减数列(Non-decreasing Array)
  • 原文地址:https://www.cnblogs.com/wxt19941024/p/7054159.html
Copyright © 2011-2022 走看看