线性表的插入与删除c语言

输出结果是错的,但是我觉得一点问题也没有诶,请各路神仙看看,磕头了

#include 
#define NUM 30
void mybubble(int *pArr, int num)
{//使用冒泡排序法对数组pArr进行从小到大排序,num为数组元素的个数
    int i, j, t;
    for (i = 0; i < num - 1; i++)
    {
        for (j = 0; j < num - i - 1; j++)
        {
            if (pArr[j] > pArr[j + 1])
            {
                t = pArr[j + 1];
                pArr[j + 1] = pArr[j];
                pArr[j] = t;
            }
        }
    }
}
int myfind(int *pArr, int key, int num)
{
    int left=0;
    int right=num-1;
    int mid=0;
    while(left<=right)
    {
        mid=(left+right)/2;
        if(pArr[mid]-1;
        }
        else if(pArr[mid]>key)
        {
            right=pArr[mid]+1;
        }
        else
        {
            return pArr[mid];
        }
    }
    return -1;
    //数组pArr已按从小到大排好序,key为要查找的关键字值,num为数组元素的个数
    //查找成功,返回该关键字值所在位置的下标,若查找失败则返回-1

//填入实验s04128的相关代码


}
int myinsert(int *pArr, int key, int *num)
{
    if(myfind(pArr,key,*num)!=-1)
    {
        return -1;
    }
    int i=(*num)-1;
    while(pArr[i]>key)
    {
        pArr[i+1]=pArr[i];
        i--;
    }
    pArr[i+1]=key;
    (*num)--;
    //数组pArr已按从小到大排好序,num为数组元素的个数,key为要插入的关键字值,插入后数组保持有序
    //插入成功后,返回插入位置的下标,若插入失败则返回-1
    //如果已经存在该关键字值元素,则插入失败

//补充实现代码


}
int mydelete(int *pArr, int key, int *num)
{
    int k=myfind(pArr,key,*num),m;
    m=k;
    if(k==-1)
    {
        return -1;
    }
    for(;k<*num-1;k++)
    {
        pArr[k]=pArr[k+1];
            (*num)--;
    }
    return m;
    //数组pArr已按从小到大排好序,num为数组元素的个数,key为要删除的值,删除后数组保持有序
    //删除成功后,返回该元素的下标,若删除失败则返回-1
    //如果不存在该关键字值元素,则删除失败

//补充实现代码



}
void printarray(int *pArr, int num)
{
    int i;
    for (i = 0; i < num; i++)
        printf("\t%d", *pArr++);
    printf("\n");
}

int main()
{
    int MA[NUM] = { 34, 76, 23, 67, 345, 234, 21, 78, 172, 90 };
    int nums = 10;//数组元素个数
    int mkey, nkey, k;
    mybubble(MA, nums);
    scanf("%d%d", &mkey, &nkey);//输入2个整数
    k = myinsert(MA, mkey, &nums);
    if (k < 0)
        printf("insert ERROR\n");
    else
        printf("insert SUCCESS\t%d\n", k);
    k = mydelete(MA, nkey, &nums);
    if (k < 0)
        printf("delete ERROR\n");
    else
        printf("delete SUCCESS\t%d\n", k);
    printarray(MA, nums);
    return 0;
}

你写了4个函数,就只有最后才打印,鬼能猜到是哪一步写错了
你不敢每一步打印出来看看到底长什么样吗,先定位到底是哪个函数写错了再查原因啊
调代码不要全靠猜
你一开始就写错了,那检查代码的时候当然怎么看怎么感觉对
你得先知道到底是哪里错了,才能意识到其实没有写对,才会仔细去看
-=-=-=
我随便看看就看出个大bug来,mydelete函数里num--为什么写循环里了,这不给减没了吗
不要着急写一大堆代码,写一个函数就测一个函数,不要只测数组,看看其他那些num之类的变量的值到底是不是你预期的样子
如果前面就已经出错了,后面继续按错误的数值运算,那也不可能改对了呀

先不看你的二分查找和排序。
1、你的insert函数是int类型的,返回值呢?
2、你的查找返回值是数组元素值,那你的delete函数把数组元素值当下标用?