C/C++实现在一组排列好的数中插入一组数,并按照原先排列方式进行打印

本篇文章以C代码为例,可以直接在编译器上使用。
实现步骤:

1. 确定原来一组数的排序方式

2. 输入一组数

3. 将输入的数按照排序规则进行排序

4. 将输入数插入原来的数


a.输入的是三个一样的数

b.输入的三个数的最大值小于原数的最小值

c.输入的三个数的最小值大于原数的最小值

d.输入的三个数在原数组的两数之间

e. 输入的数与原数组没有关系


代码实现(有些变量没有使用

#include <stdio.h>void collect(int* p);void collect(int* p){    int temp1, temp2, temp3;    int arr[3];//用来存放收集的数    temp1 = *p;    temp2 = *(p + 1);    temp3 = *(p + 2);    if (temp1 == temp2 && temp2 == temp3)        ;    else if (temp1 == temp2 || temp1 == temp3 || temp2 == temp3)    {        if (temp1 == temp2)//如果1、2数相等,比较3数与1数        {            if (temp1 < temp3)                ;//输出1<2<3            else//1>3  1=2>3 将1与3对调            {                int temp = 0;                temp = *p;                *p = *(p + 2);                *(p + 2) = temp;            }//1<2=3        }        else if (temp1 == temp3)        {            if (temp2 < temp3)//2<1=3  1与2对调            {                int temp = 0;                temp = *p;//5     255                *p = *(p + 1);//2                *(p + 1) = temp;//5            }            else//1=3<2   将2与3对调            {                int temp = 0;                temp = *(p + 1);                *(p + 1) = *(p + 2);                *(p + 2) = temp;            }        }        else//2=3        {            if (temp1 < temp3)                ;//1<2=3              else//2=3<1   将1与3对调            {                int temp = 0;                temp = *p;                *p = *(p + 2);                *(p + 2) = temp;            }        }    }    else    {        if (temp1 > temp2 && temp1 > temp3)        {            if (temp2 > temp3)//3<2<1  1 3调换            {                int temp = 0;                temp = *p;                *p = *(p + 2);                *(p + 2) = temp;            }            else//2<3<1                   {                *p = temp2;                *(p + 1) = temp3;                *(p + 2) = temp1;            }        }        else if (temp2 > temp1 && temp2 > temp3)        {            if (temp1 > temp3)//3<1<2            {                *p = temp3;                *(p + 1) = temp1;                *(p + 2) = temp2;            }            else//1<3<2   2  3对调            {                int temp = 0;                temp = *(p + 1);                *(p + 1) = *(p + 2);                *(p + 2) = temp;            }        }        else//3最大        {            if (temp1 > temp2)//2<1<3            {                *p = temp2;                *(p + 1) = temp1;            }            else//1<2<3                ;        }    }}int main(){    int arr[13] = { 1,3,5,7,9,10,25,26,30,35 };    int i, j, min, max, count;    int letin[3];    for (i = 0; i < 10; i++)    {        printf("%4d", arr[i]);    }    printf("请输入你要添得3个数:>");    //scanf("%d", &number);//8    for (i = 0; i < 3; i++)    {        scanf("%d", &letin[i]);    }    collect(letin);//将插入的数进行排序    min = letin[0];    max = letin[2];    //输入的最小值>原数列的最大值    //输入的最大值<原数列的最小值    //直接输出    if (min > 35 || min == 35)    {        arr[10] = letin[0];        arr[11] = letin[1];        arr[12] = letin[2];    }    else if (max < 1)//先定义一个新数组接收,在将arr重置    {        int newarr[13];        for (i = 0; i < 3; i++)        {            newarr[i] = letin[i];        }        for (j = 3; j < 13; j++)        {            newarr[j] = arr[j - 3];        }        for (i = 0; i < 13; i++)        {            arr[i] = newarr[i];        }    }    else//分两种情况:第一种letin3个数在arr中两个数之间;第二种无序    {        int newletin[3], m, n;        int newarr[13];        i = 0;        //第一种        while ( i < 10)        {            if (arr[i]<min && arr[i + 1]>max)//arr[i]<min<max<arr[i+1]            {//1 3 5 7 9 10 25       11 12 13(9)  ,26,30,35                int newarr[13], k, m, n;                for (j = 0; j <= i; j++)                {                    newarr[j] = arr[j];                }                for (j = i + 1; j <= i + 3; j++)                {//7     6  7                    7-7 7-6 7-5                    newarr[j] = letin[j - i - 1];//7  0                }                for (j = i + 4; j < 13; j++)                {//      10          7                    newarr[j] = arr[j - 3];//26                }                for (n = 0; n < 13; n++)                {                    arr[n] = newarr[n];                }                //break;            }            i++;        }        count = 0;        for (j = 0; j < 3; j++)//无序        {            for (i = 0; i < 10; i++)            {//1,3,5,7,9,10,25,26,30,35       4 8 11                if (arr[i] > letin[j])                {                    newletin[j] = i;//2  4  6                    break;                }            }         //  0,1,2,3,4,5,6, 7, 8, 9,10,11,12          }//               1,3,4,5,7,8,9,10,11,25,26,30,35               for (m = 0; m < newletin[0]; m++)//[0,2)        {            newarr[m] = arr[m];//0 1->1 3                                                         1  3        }        newarr[newletin[0]] = letin[0];//  2  ///////////////////////////////////////////////           4        for (m = newletin[0]+1; m <= newletin[1]; m++)//[3,4)        {/////////[3,4]     2,3            newarr[m] = arr[m-1];//1,3,5,7,9,10,25,26,30,35        }                        //0,1,2,3,4, 5, 6, 7, 8, 9        newarr[newletin[1]+1] = letin[1];//5   8        for (m = newletin[1]+2; m <= newletin[2]+1; m++)//[5,6)        {///////m=6  m=7            newarr[m] = arr[m-2];        }        newarr[newletin[2]+2] = letin[2];//8        for (m = newletin[2]+3; m < 13; m++)//[7,13)        {///m=9 m<13            newarr[m] = arr[m-3];        }        //newarr存有全部元素        for (i = 0; i < 13; i++)            arr[i] = newarr[i];    }    for (i = 0; i < 13; i++)        printf("%d ", arr[i]);    return 0;}

在主函数中的if - else if - else
else语句中使用了一个while语句和for语句。


while语句的作用是判断输入的三个数是否在原数组的两个数之间。如果遍历了原数组和输入数组发现条件不成立,就结束while语句。
进入for语句,进行最后的查找排序。
注:在代码中有很多数字,数字的作用是来判断数组的下标和元素

©著作权归作者所有:来自51CTO博客作者小兮侑的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 2021-02-26:一个数组arr是二叉树的中序遍历结果,每条边的开销是父
  2. 我的第30个代码
  3. 【java】面试官问我,如何实现一个自定义序列化
  4. 【redis】使用redis位图轻松实时统计日活
  5. Java与php的一些关联
  6. 数组/JSON/AJAX/跨域
  7. 数据结构与算法专题——第六题 树状数组
  8. 数据结构与算法专题——第一题 Bitmap算法
  9. 数据结构与算法专题——第十题 输入法跳不过的坎-伸展树

随机推荐

  1. eclipse创建android项目,无法正常预览布局
  2. android之ION内存管理器(1)-- 简介
  3. android:ellipsize
  4. [置顶] Android编译系统详解(一)
  5. Android让所有应用都竖屏显示或者横屏显
  6. unity 与 android 协调工作 注意事项
  7. android基础(开发环境搭建)
  8. 在 Android(安卓)Studio 上调试数据库 (
  9. Android Studio 启用Lambda表达式
  10. android SDK编译版本修改