希尔排序问题出在哪里?

DayThinking 2012-06-11 10:20:21
各位大侠好,帮忙看下我写的这个希尔排序,错在什么地方,谢谢?

#include "stdafx.h"
#include<iostream>
using namespace std;
const int SIZE=10;
void shellSort(int ia[],int size);
int _tmain(int argc, _TCHAR* argv[])
{
int temp,j;
int ia[SIZE]={8,6,1,7,9,2,5,3,4,0};
//int ia[SIZE]={49,38,65,97,76,13,27,49};
shellSort(ia,8);

for (int i=0;i<SIZE;++i)
cout<<ia[i]<<" ";
cout<<endl;
system("pause");
return 0;
}
void shellSort(int ia[],int size)
{
int iNum=size;
while(iNum>1)
{
iNum=(iNum+1)/2;
for(int i=0;i<size-iNum;++i)
{
if (ia[i]>ia[i+iNum])
swap(ia[i],ia[i+iNum]);
}
}
}

...全文
122 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hen_hao_ji 2012-06-11
  • 打赏
  • 举报
回复
你有10个元素,这里应该改成这样吧:

shellSort(ia,10); //8改成10
DayThinking 2012-06-11
  • 打赏
  • 举报
回复
问题解决了,不好意思,看错地方了,这段代码是没有问题的啦,多谢各位了呵。
DayThinking 2012-06-11
  • 打赏
  • 举报
回复
修改成这样后,还是有点问题:求解啊

void shellSort(int ia[],int size)
{
int iNum=size,temp;
while(iNum>1)
{
iNum=(iNum+1)/2;
for(int i=iNum;i<size;++i)
if(ia[i]<ia[i-iNum])
{
temp=ia[i];
int k=i-iNum;
for (;k>=0 && ia[k]>temp;k-=iNum)
ia[k+iNum]=ia[k];
ia[k+iNum]=temp;
}
}
}
qq120848369 2012-06-11
  • 打赏
  • 举报
回复
少了一层循环,应该是缺少了内层循环,也就是没有插入排序过程。
gabriel1017 2012-06-11
  • 打赏
  • 举报
回复
晕, 没刷新,没看到
gabriel1017 2012-06-11
  • 打赏
  • 举报
回复
有什么问题, 我这里已经运行成功了呀


#include<stdlib.h>
#include<iostream>
#include<ctime>

using namespace std;
void shellSort(int ia[], int size) {
int iNum = size, temp;
while (iNum > 1) {
iNum = (iNum + 1) / 2;
for (int i = iNum; i < size; ++i)
if (ia[i] < ia[i - iNum]) {
temp = ia[i];
int k = i - iNum;
for (; k >= 0 && ia[k] > temp; k -= iNum)
ia[k + iNum] = ia[k];
ia[k + iNum] = temp;
}
}
}

int main(int argc, char **argv) {
int a[12] = { 1, 2, 4, 5, 5, 234, 1, 23, 56, 4, 765, 7 };

shellSort(a, 12);

for (int i = 0; i < 12; i++)
cout << a[i] << endl;
//for()
}


输出:
1
1
2
4
4
5
5
7
23
56
234
765

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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