要做的是在一个排好序的整型数组里插入一个新的整数。程序能通过编译但是运行时总是提示debug assertion failed。。。应该是realloc函数的使用问题,因为我将realloc那一行注释掉,程序就可以运行了(尽管结果不对)。另外,对于二分法排序,我的程序也有问题,比如如果想要插入的数字是100,就会排错位置。求高手解答并将改正的代码贴上来。准确解答可以提高悬赏

#include <iostream>
#include<stdlib.h>

展开全部
收起
6回答
提交回答
  • 至过去的我

    2044人对此回答表示赞同

    我是未来的你,你现在是不是在年找寻小程序答案。你不要感觉诧异,给你来信原因,就是让你不在后悔。今天去学习如何推广小程序,相信......点击查看更多>
    发布于
  • 李思思044

    14人对此回答表示赞同

    感觉楼上的差不多对了。。就是感觉那个right=size-1之后如果插入的数比10大就会结果不正确么,还有那个a是全局变量为什么不在那个int *insertsorted里直接用a呢,我是菜鸟也是来学习的
    展开
    14
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • 吴震

    12人对此回答表示赞同

    改成这样就对了
    #include <iostream>
    #include<stdlib.h>
    using namespace std;

    int *insertsorted(int *arr, int* size, int val)
    {
    int left=0, right=*size - 1, mid, i;
    while(left<right)
    {
    mid=(lef
    展开
    12
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • 理屈词穷

    10人对此回答表示赞同

    你使用了array=insertsorted(array,value);不知道是不是想做成链式表达式,这样的话main函数中array=a;不行,得先malloc分配一样大的一片内存并拷贝所有元素。realloc之前,你的array并没有malloc过,realloc不能改变a为新空间。

    这样修改下,至少能用。

    #include <iostream>
    #include<stdlib.h>
    using namespace
    展开
    10
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • 记号笔

    10人对此回答表示赞同

    首先int a[]={1,2,3,4,5,6,7,8,9,10}这里没有定义a的字符的多少
    编译时会默认就这么多个,分配这些单元,不会多,所以插入数值的时候,有可能越界,所以要定义a的长度

    再就是在有序的数列中插入数值的时候,没必要用二分法,二分法效率是高一些
    直接从后面比较,要是小,最后一个就后移一位,腾出空间,最后判断大了,就插入后面就可以。这个思路很好实现

    *(arr+mid)象这种,好像是应该*(arr+mid*sizeof(int)
    展开
    10
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • Teagan

    6人对此回答表示赞同

    a的定义方式 与 realloc 不相容,定义a时也要使用类似的方式,比如使用malloc
    展开
    6
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • 龙猫

    2人对此回答表示赞同

    //arr=(int*)realloc(arr,sizeof(a)+sizeof(int));
    这句realloc不能用在数组中,只能用在指针申请的空间。

    程序代码给你重新编译过修改了一下,

    经测试,【对于二分的插入数据(前端、后端、中端)都是可行的。】

    代码修改如下:

    #include <iostream>
    #include<stdlib.h>
    using nam
    展开
    2
    0回复
    发布于 6年前

    评论(0)

    收起评论

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
咨询热线

13312967497

扫码添加业务即可随时咨询 还可领取小程序推广攻略

业务咨询: 13312967497
扫码咨询

扫码咨询套餐

回到顶部