学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

郁闷了,shellsort~

郁闷了,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);
}

[ 本帖最后由 中学者 于 2008-5-8 20:06 编辑 ]

TOP

Shell排序只是辅助排序,而不能完成排序

C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org

TOP

不才,没懂~shell排序不是插入排序的简单扩展么?
汇编.....

TOP

你说是冒泡排序的简单扩展那还说得过去。。。你说插排的话。。。

C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org

TOP

它的核心部分还是用的插入排序嘛.....和冒泡应该没关吧?
汇编.....

TOP

最小增量法不怎么用哦..练下手

#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;
}

[ 本帖最后由 sunkaidong 于 2008-5-8 20:14 编辑 ]
学习需要安静。。海盗要重新来过。。

TOP

思维停滞了,错误找到了
汇编.....

TOP

我也差点弄错了..呵呵
学习需要安静。。海盗要重新来过。。

TOP

?燕子怎么觉得希尔是冒泡的扩展呢???简单排序和复杂排序的关系如下:
冒泡排序=>快速排序
选择排序=>堆排序
插入排序=>希尔排序

=>表示改进~~~
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

发新话题