weixin_42603916 2021-12-02 21:48 采纳率: 100%
浏览 32
已结题

C++排列未知大小的数组顺序的函数怎么做啊?

我想做一个任意一个double型或者int型的数组进行排列的函数。可是到了第一步函数定义就遇到问题了。请问怎么做这样的函数啊?

  • 写回答

3条回答 默认 最新

  • 关注

    你所说的位置大小的数组,应该是在输入的时候不知道会从键盘输入多少个数吧,当输入完成的时候,输入了多少个数是能知道的。这时候你可以用冒泡排序,也可以用选择排序。
    输入不定个数的数据,有多种方法,比如当输入回车符的时候结束输入,或者当输入-1的时候结束,这个根据具体情况来定。下面的例子是当输入回车符时结束输入。
    运行结果:

    img

    代码如下:

    
    #include <iostream>
    using namespace std;
    //冒泡排序
    void bubble_sort(int a[],int n);
    //选择排序,升序
    void select_sort(int a[],int n);
    
    int main()
    {
        int *p;
        int n=0;
        int maxsize=1000;
        p = new int[maxsize]; //先申请maxsize个空间
        while(1)
        {
            cin >> p[n];
            n++;
            if(n==maxsize)
            {
                maxsize += 100;//在原来的基础上再额外申请100个空间
                int *q = new int[maxsize];
                //把原数组的元素复制到新数组中
                for(int j=0;j<n;j++)
                    q[j]=p[j];
                //释放原来的空间
                delete[] p;
                //让p指向新申请的空间
                p = q;
            }
            if(cin.get() == '\n') //输入回车符结束输入
                break;
        }
        //冒泡排序或者选择排序,都可以
        bubble_sort(p,n); //select_sort(p,n);
        //输出排序后的数组
        for(int i = 0;i<n;i++)
            cout << p[i] << " ";
        //释放空间
        delete[] p;
        p = 0;
        return 0;
    }
    
    
    //冒泡排序
    void bubble_sort(int a[],int n)
    {
        int i,j,t;
        for (i=0;i<n-1;i++)
        {
            for (j=0;j<n-1-i;j++)
            {
                if(a[j] > a[j+1])  //从小到大,升序
                {
                    t = a[j];
                    a[j]=a[j+1];
                    a[j+1]=t;
                }
            }
        }
    }
    
    //选择排序,升序
    void select_sort(int a[],int n)
    {
        int i,j;
        int minindex,tmp;
        for (i=0;i<n-1;i++)
        {
            minindex = i;
            //找出第i小的数所在的位置
            for(j=i+1;j<n;j++)
            {
                if(a[j] < a[minindex])
                    minindex = j;
            }
    
            //将第i小的数放在第i个位置
            if (i != minindex)
            {
                tmp = a[i];
                a[i] = a[minindex];
                a[minindex] = tmp;
            }
        }
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月12日
  • 已采纳回答 12月4日
  • 创建了问题 12月2日

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP