大家帮忙看看,哪里需要修改,这是一个希尔排序的程序
运行的时候出的错误
#include<stdio.h>
#define MAXITEM 10
void shellsort(int b[],int n)
{
int i,j,gap;
int x;
gap = n/2;//gap是排序次数
while( gap>0 )
{
for( i=gap + 1; i<= n;i++)
{
j = i - gap;
while( j > 0 )
if ( b[j] > b[ j+gap ] )
{
x = b[j];//将r[j]与r[j+gap]进行交换
b[j] = b[j+gap];
b[j+gap] = x;
//j = j-gap;
}
else j = 0;
}
gap = gap/2;
}
for( i=0;i<n;i++)
{
printf("%d,",b[i]);
}
}
void main(void)
{
int a[MAXITEM];
int m=10,i=0;
for( i=1;i<=m;i++)
{
printf("请输入第%d个数:",i);
scanf("%d",&a[i]);
printf("\n");
}
shellsort(a,m);
}
问题点数:20、回复次数:3Top
1 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-07-01 12:05:59 得分 0
for( i=0;i<m;i++) // 就是这个地方!1Top
2 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-07-01 12:06:43 得分 0
#define MAXITEM 10
int a[MAXITEM];
for( i=1;i<=m;i++) // error:: 可用范围: a[0] ````````a[9]Top
3 楼jixingzhong(瞌睡虫·星辰)回复于 2006-07-01 12:33:35 得分 0
#include <stdio.h>
#include <stdlib.h>
#define Max 15
void shell_sort(int num[])
{
int d=Max;
while(d>1)
{
int i,j,key;
d=d/3+1;
for(i=d;i<Max;i++)
{
if(num[i]<num[i-d])
{
key=num[i];
j=i-d;
while(j>=0&&key<num[j])
{
num[j+d]=num[j];
j-=d;
}
num[j+d]=key;
}
}
}
}
int main()
{
int num[Max]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int k;
for(k=0;k<Max;k++)
{
printf("%d ",num[k]);
}
printf("\n");
shell_sort(num);
for(k=0;k<Max;k++)printf("%d ",num[k]);
printf("\n");
return 0;
}
Top




