输出结果是错的,但是我觉得一点问题也没有诶,请各路神仙看看,磕头了
#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函数把数组元素值当下标用?