工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1936|回复: 7

关于shell排序,偶照着书写了一个程序,但运行不了,求高手帮忙

[复制链接]
发表于 2006-2-27 13:28 | 显示全部楼层 |阅读模式
void shellsort(int v[],int n)
                                    { int gap,i,j,temp;
                                        for(gap=n/2;gap>0;gap/=2)
                                           for(i=gap;i<n;i++)
                                              for(j=i-gap;j>=0&&v[j]>v[j+gap];j-=gap)
                                                { temp=v[j];
                                               v[j]=v[j+gap];
                                               v[j+gap]=temp;
                                               }
                                       }
  #include<stdio.h>
   main()
         { int i;
            int v[11]={13,38,65,97,76,13,27,49,55,04};
             shellsort(int v[11],10);
               for (i=0;i<10;i++)
              printf("%d",v);
              getch();
                                         }
            编译时提示的错误如下: shells~1.c 16: 表达式语法错在 main 函数中
发表于 2006-2-27 14:08 | 显示全部楼层
原帖由 arphy 于 2006-2-27 13:28 发表
#include<stdio.h>
void shellsort(int v[],int n)
{
int gap,i,j,temp;
for(gap=n/2;gap>0;gap/=2)
for(i=gap;i<n;i++)
  for(j=i-gap;j>=0&&v[j]>v[j+gap];j-=gap)
   { temp=v[j];
     v[j]=v[j+gap];
     v[j+gap]=temp;
    }
}
main()
         { int i;
            int v[11]={13,38,65,97,76,13,27,49,55,04};
             shellsort(int v[11],10);/*应是shellshort(v,10);吧?*/
               for (i=0;i<10;i++)
              printf(\"%d\",v);
              getch();                                       
}
回复

使用道具 举报

 楼主| 发表于 2006-2-27 16:53 | 显示全部楼层
编译时也提示是那一句有问题,不过刚刚按楼上说的改了一下程序,还是提示shellsort(int v[],10);有问题。楼上的确信已经编译通过了吗?
回复

使用道具 举报

发表于 2006-2-27 16:58 | 显示全部楼层
是shellsort(v,10);
楼主请复习一下函数调用,区分一下形参和实参...
回复

使用道具 举报

发表于 2006-2-28 14:48 | 显示全部楼层
main()
         { int i;
            int v[11]={13,38,65,97,76,13,27,49,55,04};
             shellsort(int v[10],10); //把这句改为: shellsort(v[10],10);
                         //形参和实参
回复

使用道具 举报

发表于 2006-2-28 15:11 | 显示全部楼层
原帖由 小标题 于 2006-2-28 14:48 发表
main()
         { int i;
            int v[11]={13,38,65,97,76,13,27,49,55,04};
             shellsort(int v[10],10); //把这句改为: shellsort(v[10],10);
                         //形 ...

你这个调用传递过去的不是数组而数组中的元素.传递数组仅需数组名即可.实际上传过去的会是数组的首地址
回复

使用道具 举报

发表于 2006-3-12 11:25 | 显示全部楼层
原帖由 arphy 于 2006-2-27 01:28 PM 发表
void shellsort(int v[],int n)
                                    { int gap,i,j,temp;
                                        for(gap=n/2;gap>0;gap/=2)
                                           for(i=gap;i<n;i++)
                                              for(j=i-gap;j>=0&&v[j]>v[j+gap];j-=gap)
                                                { temp=v[j];
                                               v[j]=v[j+gap];
                                               v[j+gap]=temp;
                                               }
                                       }
  #include<stdio.h>
   main()
         { int i;
            int v[11]={13,38,65,97,76,13,27,49,55,04};
             shellsort(int v[11],10); //change to shellshort(v,n);
               for (i=0;i<10;i++)
              printf("%d",v);
              getch();
                                         }
            编译时提示的错误如下: shells~1.c 16: 表达式语法错在 main 函数中  

还有你试试把#include<stdio.h>放到第一行。


原帖由 小标题 于 2006-2-28 02:48 PM 发表
main()
         { int i;
            int v[11]={13,38,65,97,76,13,27,49,55,04};
             shellsort(int v[10],10); //把这句改为: shellsort(v[10],10);
                         //形参和实参

这样改,只是把数组元素传过去,如楼上所说。
传数组只要用数组名就行了。
回复

使用道具 举报

发表于 2006-3-17 22:41 | 显示全部楼层
7楼的应该是正确的修改!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-15 05:06

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表