Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13097
  • 博文数量: 3
  • 博客积分: 130
  • 博客等级: 入伍新兵
  • 技术积分: 30
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-03 09:39
文章分类

全部博文(3)

文章存档

2010年(3)

我的朋友
最近访客

分类: C/C++

2010-09-07 17:35:17

shell排序

1、基本思想

希尔排序(Shell's sort)又称为“缩小增量排序”,本质上它也是一种插入排序,但在时间效率上较直接插入排序、折半插入排序等有较大的该机。

从对直接插入排序的分析可知,其算法时间复杂度为O(n2)但是如果待排序记录序列为“正序”时,其时间复杂度可以提高到O(n)。由此设想,如果待排序记录序列“基本有序”时,则直接插入排序的效率就可以大大提高;从另一方面来看,由于直接插入排序算法简短,则在n值很小时效率也比较高。希尔(shell)排序正是从这两点分析出发对直接插入排序进行改进得到的一种插入排序方法。

基本思想是:先将整个待排序记录分割成为若干子序列分别进行直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。

 

2、排序源码


void shellsort(int array[],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&&array[j]>array[j+gap];j-=gap)

            {

                temp=array[j];

                array[j]=array[j+gap];

                array[j+gap]=temp;

            }

    }

}
阅读(685) | 评论(0) | 转发(0) |
0

上一篇:最长递增子序列问题的求解(LIS)

下一篇:没有了

给主人留下些什么吧!~~