| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 911 人关注过本帖
标题:郁闷了,shellsort~
只看楼主 加入收藏
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
结帖率:33.33%
收藏
 问题点数:0 回复次数:8 
郁闷了,shellsort~
初始增量的不同,排序可能不能完成.....这是怎么回事?在怎么看,最差的时候inc=1,s=0就当一般插入排序进行,但是却没完成排序//
void subsort(int* arr,int size_a,int inc,int s)
{
    for(int i=s+inc;i<size_a;i+=inc)
    {
        int key = arr[i];
        int j=i-inc;
        for(;j>=s&&arr[j]>key;)
        {
            arr[j+inc]=arr[j];
             j-=inc;
        }
        arr[j+inc]=key;
    }
}
void shellSort(int* arr,int size_a)
{
  
  int inc=size_a;
  do{
      inc=inc/3+1;
       for(int s=0;s<inc;++s) subsort(arr,size_a,inc,s);
  }while(inc>1);
}

[[it] 本帖最后由 中学者 于 2008-5-8 20:06 编辑 [/it]]
搜索更多相关主题的帖子: int arr shellsort key size 
2008-05-08 19:25
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
Shell排序只是辅助排序,而不能完成排序

[color=white]
2008-05-08 19:41
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
不才,没懂~shell排序不是插入排序的简单扩展么?

樱花大战,  有爱.
2008-05-08 19:49
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
你说是冒泡排序的简单扩展那还说得过去。。。你说插排的话。。。

[color=white]
2008-05-08 19:52
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
它的核心部分还是用的插入排序嘛.....和冒泡应该没关吧?

樱花大战,  有爱.
2008-05-08 19:56
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
最小增量法不怎么用哦..练下手
#include<stdio.h>
void subsort(int* arr,int size_a,int inc,int s)
{
    for(int i=s;i<size_a-inc;i+=inc)
    {
        for(int j=s;j<size_a-inc;j+=inc)
            if(arr[j]>arr[j+inc])
            {
                int demo=arr[j+inc];
                arr[j+inc]=arr[j];
                arr[j]=demo;
            }
    }
}
void shellSort(int* arr,int size_a)
{
  
   for(int inc=(size_a)/3+1;inc>=1;inc-=1)
       for(int s=0;s<inc;++s)
           subsort(arr,size_a,inc,s);
}
int main()
{
    int a[]={1,2,3,4,5,1,7,8,1,0};
    shellSort(a,sizeof(a)/sizeof(int));
    for(int i=0;i<sizeof(a)/sizeof(int);i++)
        printf("%d ",a[i]);
    return 0;
}

[[it] 本帖最后由 sunkaidong 于 2008-5-8 20:14 编辑 [/it]]

学习需要安静。。海盗要重新来过。。
2008-05-08 20:05
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
思维停滞了,错误找到了

樱花大战,  有爱.
2008-05-08 20:07
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
我也差点弄错了..呵呵

学习需要安静。。海盗要重新来过。。
2008-05-08 20:20
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
?燕子怎么觉得希尔是冒泡的扩展呢???简单排序和复杂排序的关系如下:
冒泡排序=>快速排序
选择排序=>堆排序
插入排序=>希尔排序

=>表示改进~~~

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-08 20:48
快速回复:郁闷了,shellsort~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.089000 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved