栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言每日一练——第42天:将一个数插入到排序数组中

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言每日一练——第42天:将一个数插入到排序数组中

C语言每日一练
2021年10月24日

题目描述

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

分析

原数组可能是递增的或递减的,首先判断排序规律。假如是从小到大的顺序,先判断新增的数字是否比原数组最大值(最后一位)大,如果不是,则依次和其他数组值比较,如果小于某数组元素,则将新增数字插到该数组元素之前。
向数组中插入元素也是这题比较重要的功能,实现数组插入,可以先将插入位置后面的数组元素全部后移一位,再插入新的数组到目标位置。

代码实现
#include 


void Insert_Array_Item(int *array, int len, int num, int index);
void Print_Array(int *array, int len);
int Get_Array_Index(int *array, int len, int num, int order);

int main()
{
    int num = 0;
    int array_1[20] = {1, 3, 5, 7, 9,}; //顺序数组
    int array_2[20] = {9, 7, 5, 3, 1,}; //倒序数组
    int index_1 = 0;  //插入的位置
    int index_2 = 0;

    printf("现有两个数组:n");
    
    Print_Array(array_1, 5);
    Print_Array(array_2, 5);

    printf("n请输入一个数字n");
    scanf("%d", &num);

    
    index_1 = Get_Array_Index(array_1, 5, num, 1); //顺序排列
    index_2 = Get_Array_Index(array_2, 5, num, 0); //逆序排列

    
    Insert_Array_Item(array_1, 5, num, index_1);
    Insert_Array_Item(array_2, 5, num, index_2);

    printf("新的数组为n");
    Print_Array(array_1, 6);
    Print_Array(array_2, 6);
    return 0;
}


void Insert_Array_Item(int *array, int len, int num, int index)
{
    int i = 0;
    for(i = len - 1; i >= index; i--) //将数组后面元素向后移
        array[i + 1] = array[i];

    array[index] = num;  //插入新元素
}


void Print_Array(int *array, int len)
{
    int i = 0;
    for(i = 0; i < len; i++)
    {
        printf("%d ", array[i]);
    }
    printf("n");
}


int Get_Array_Index(int *array, int len, int num, int order)
{
    int i = 0;
    if(order) //顺序排列
    {
        if(num > array[len - 1])
            return len;
    }
    else      //逆序排列
    {
        if(num < array[len - 1])
            return len;
    }
    for(i = 0; i < len; i++)
    {
        if(order)
        {
            if(num < array[i])
                return i;
        }
        else
        {
            if(num > array[i])
                return i;
        }
    }
    return 0;
}

运行结果

网上参考

原文地址:https://www.runoob.com/cprogramming/c-exercise-example39.html
下面两个示例都只考虑顺序排列
示例1:

//  Created by www.runoob.com on 15/11/9.
//  Copyright © 2015年 菜鸟教程. All rights reserved.
//
 
#include
int main()
{
    int a[11]={1,4,6,9,13,16,19,28,40,100};
    int temp1,temp2,number,end,i,j;
    printf("原始数组是:n");
    for(i=0;i<10;i++)
        printf("%4d",a[i]);
    printf("n插入一个新的数字: ");
    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("%4d",a[i]);
    printf("n");
    return 0;
}

示例2:(与示例1来源相同)
示例2使用了从数组尾部循环实现数组元素后移,这样看起来更加直观。

#include

int main()
{
    int opo[11]={1,4,6,9,13,16,19,28,40,100};//原始的数组,题目给的
    int a,b,c,e;
    printf("这是原始的数组");
    for(a=0;a<10;a++)printf("%d ",opo[a]); 
        printf("n输入一个数,插入原数组");
    scanf("%d",&b);
    for(c=9;c>=0;c--){  //使用逆序的话,可以省掉很多过程,而且清晰
        if(b
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/346659.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号