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
    	————————————————————————————————————————
    	采用一个新的数组进行存储
    */
    

      

  • 相关阅读:
    C# 16进制字节转Int(涉及:Base64转byte数组)
    c# CRC-16 / MODBUS 校验计算方法 及 异或校验算法
    SqlSugar 用法大全
    SQL Server-聚焦NOLOCK、UPDLOCK、HOLDLOCK、READPAST你弄懂多少?
    使用 tabindex 配合 focus-within 巧妙实现父选择器
    DataX 3.0 源码解析一
    Golang必备技巧:接口型函数
    PID控制
    dockerfile,拷贝文件夹到镜像中(不是拷贝文件夹中的内容到镜像)
    什么是PKI?主要作用是什么?
  • 原文地址:https://www.cnblogs.com/wxt19941024/p/7054159.html
Copyright © 2011-2022 走看看