希尔排序错误

来源:百度知道 编辑:UC知道 时间:2024/07/07 03:46:16
void shell(int n[],int d,int NUM)
{
int i,temp;
for(i=d;i<NUM;i++)
if(n[i]<n[i-d])
{
temp=n[i];
while(i-d>=0&&temp<n[i-d])
{
n[i]=n[i-d];
i-=d;
}
n[i]=temp;
}
}

void shell_sorta(int array[], int size)
{
int s=size;
do{
s/=2;
shell(array,s,size);
}while(s>1);
}
40000以上的排序就出现 内存 read错误
请教高手解答
VC++编译器 int 四字节
32766 32765 32764 同样报错 read错误

再测试 5000以上就会报错
应该是程序变错了 但不知道哪里错

排序问题
在循环内部改变了i的值
void shell(int n[],int d,int NUM)
{
int i,temp;
for(i=d;i<NUM;i++)
{
if(n[i]<n[i-d])
{
temp=n[i];
int tmpi = i;
while(tmpi-d>=0&&temp<n[tmpi-d])
{
n[tmpi]=n[tmpi-d];
tmpi-=d;
}
n[tmpi]=temp;
}
}
}

完整程序
#include <stdio.h>
void shell(int n[],int d,int NUM)
{
int i,temp;
for(i=d;i<NUM;i++)
{
if(n[i]<n[i-d])
{
temp=n[i];
int tmpi = i;
while(tmpi-d>=0&&temp<n[tmpi-d])
{
n[tmpi]=n[tmpi-d];
tmpi-=d;
}
n[tmpi]=temp;
}
}
}

void shell_sorta(int array[], int size)
{
int s=size;
do{
s/=2;
shell(array,s,size);
}while(s>1);
}
int main (void)
{
int a[40000];
for (int i = 0;