有C高手能帮我看看这个程序是错在哪里吗?

来源:百度知道 编辑:UC知道 时间:2024/06/05 05:14:18
这个程序是要实现在这个数组int p[10]={-2,0,3,23,56,89,93,101,2034,2089}中插入一个数,使其能放到该放的位置,也就是从小到大的顺序的结果。
#include<stdio.h>
#include<malloc.h>
int f(int r)
{
if(r%2==0) r=r/2;
else if(r==1) r=r-1;
else r=(r+1)/2;
return r;
}
//下面是向一个数组p插入一个数的函数,p为数组起始地址,r为数组的长度,n为要插入的数字,c为数组的分配的内存区的大小
void g(int * p,int r,int n,unsigned int c)
{
int a,x=r,* p1,* q;
unsigned int b=(unsigned)r;
a=f(r); //得出第一次进行比较时,其折半的长度(也就知道第一次比较用的中间值了)
p1=p; q=p+x-1;
while(r>=1)
{
r=f(r);
if(r==1)
{
realloc(p1,(c+c/x));
q=q+1;
if(*(p+a-1)>n)
{
while(q>p+a-1)
{
int a1=1;
q=p1+x-a1;
q--; a1++;
}
q=&n;
printf("the number has inserted.\n");
break;
}
else
{
while(q>p+a)
{
int a2=1;
q=p1+x-a2;

刚看过数组的定义好像就有点问题。int p[10]只能存放从0到9的10个位置。如果插入一个数据,p[9]将被挤到数组外。从而发生不可预知的错误

你仅仅是要实现插入功能嘛,代码哪有这么麻烦,直接用插入排序。
插入排序算法:

1.从有序数列和无序数列{a2,a3,…,an}开始进行排序;
2.处理第i个元素时(i=2,3,…,n) , 数列{a1,a2,…,ai-1}是已有序的,而数列{ai,ai+1,…,an}是无序的。用ai与ai-1,a i-2,…,a1进行比较,找出合适的位置将ai插入;
3.重复第二步,共进行n-1次插入处理,数列全部有序。
void insertSort(Type* arr,long len)/*InsertSort algorithm*/
{
long i=0,j=0;/*iterator value*/
Type tmpData;
assertF(arr!=NULL,"In InsertSort sort,arr is NULL\n");
for(i=1;i<len;i++)
{
j=i;
tmpData=*(arr + i);
while(j > 0 && tmpData < arr[j-1])
{
arr[j]=arr[j-1];
j--;
}
arr[j]=tmpData;
}
}

你的题目需要那么长的程序吗?你的程序好长啊

插入数就数组溢出了