伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

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

来源:本站原创 浏览:62次 时间:2022-11-17
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语句,进行最后的查找排序。
注:在代码中有很多数字,数字的作用是来判断数组的下标和元素

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net