帮我看看希尔排序,错在哪里?得不到结果

chenhello2008 2009-04-19 03:35:13
// 4.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"
using namespace std;
#define max 1000
void shellsort(int a[],int n)
{
int i,j,x,gap;
gap=n/2;
while(gap>0)
{
for(i=0;i<n;i++)
{ j=i+gap;
if(a[i]>a[j])
{
x=a[i];
a[i]=a[j];
a[j]=x;
}
}
gap=gap/2;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int aa[max];
int p1,p2,p;
cout<<"请输入要排序的个数\n";
cin>>p;
cout<<"输入排序的数\n";
for(p1=0;p1<p;p1++)
{
cin>>aa[p1];
}
shellsort(aa,p);
for(p2=0;p2<p;p2++)
{
cout<<aa[p2];
}
return 0;
}
...全文
98 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjf8882300 2009-04-23
  • 打赏
  • 举报
回复
for(p2=0;p2 <p;p2++) ////这里p应该改成p1吧,真实的元素个数应该是p1
{
cout < <aa[p2];
}
return 0;
}
airtrack 2009-04-19
  • 打赏
  • 举报
回复
可以参考《C程序设计语言》上的希尔排序的实现。
mabo321 2009-04-19
  • 打赏
  • 举报
回复

void shellsort(int a[],int n)
{
int i,j,x,gap;
gap=n/2;
while(gap>0)
{
for(i=0;i <n;i++)
{
j=i+gap; //这一块 当i=n-1 gap非0 下边a[j] 越界……
if(a[i]>a[j])
{
x=a[i];
a[i]=a[j];
a[j]=x;
}
}
gap=gap/2;
}
}


你想法 不对……
chenhello2008 2009-04-19
  • 打赏
  • 举报
回复
没人回答吗?
chenhello2008 2009-04-19
  • 打赏
  • 举报
回复
是主函数,是vs2005,编译能够通过,就是输出结果溢出
cheng_fengming 2009-04-19
  • 打赏
  • 举报
回复
int _tmain(int argc, _TCHAR* argv[]) //这是主函数?不对吧
建议楼主把错误信息贴上来 这样大家看起来比较容易一些 ,对症下药!

33,319

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧