shell排序

原创 2015年07月06日 21:32:59

shell排序是通过分组来进行排序,让后一个分组的数字和前面一个分组的数字进行对比,如果大于(或者小于),那么进行替换。排好之后再进行下一轮排序。

shell排序的代码如下:

/*************************************************************************
    > File Name: test.c
    > Author: wayne
    > Mail: @163.com 
    > Created Time: 2015/7/6 21:09:57
 ************************************************************************/

#include<stdio.h>
void array(int a[], int len)
{
    int i;
     for(i=0;i<len;i++)
        {
            printf("%d  ", a[i]);
        }
}

void shellsort(int a[], int len)
{
    int i, j, increment;
    int tmp;
    for(increment = len/2; increment > 0 ; increment /=2)
        {
            for(i=increment;i<len;i++)
            {
                tmp = a[i];
                for(j=i; j>=increment; j-=increment)
                {
                    if(tmp<a[j-increment])
                        a[j] = a[j-increment];
                    else
                        break;
                }
                    a[j] = tmp;
            }

            array(a, 13);
            printf("---------\n");
        }
}

int main()
{
    int a[] = {81,94,11,96,12,35,17,95,28,58,41,75,15};
    int len = sizeof(a)/sizeof(int);
    printf("%d\n", len);
    printf("\n");
    array(a, len);
    printf("\n");
    shellsort(a, len);
    array(a,len);
    return 0;
}
运行的结果如下:

13

81  94  11  96  12  35  17  95  28  58  41  75  15  
15  94  11  58  12  35  17  95  28  96  41  75  81  ---------
15  12  11  17  41  28  58  94  35  81  95  75  96  ---------
11  12  15  17  28  35  41  58  75  81  94  95  96  ---------
11  12  15  17  28  35  41  58  75  81  94  95  96  



数字被6分成3个分组, 首先是81,17 15进行比较排序,可以看到第三行 是按照 15 , 17 ,81排好

由于第三个分组只有一个元素,所以是 94 , 95排序,位置不变,然后是11,28排序,位置不变,然后是96,58排序,96和58位置互换。然后是12和41对比,位置不变。最后是35和75对比,位置不变。

所以第一轮排序出来的结果是第三行





Java实现Shell排序算法

Shell排序算法
  • YHYR_YCY
  • YHYR_YCY
  • 2016年06月06日 09:21
  • 676

插入排序和shell排序及其时间复杂度和空间复杂度分析

有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序。 插入排序的基本操作就是将一个数据插入到已经排好...
  • femalcoder
  • femalcoder
  • 2017年06月17日 09:58
  • 1288

排序算法总结之快速排序、归并排序、shell排序

快速排序:快排效率高,时间复杂度最理想为 O(nlogn) ,最差时间为O(n^2),该算法不稳定。其主要思想如下:快排是每次将序列第一个数当作一个参考值,分别将比参考值大的数放到参考值右侧,小于参考...
  • Dandelion_gong
  • Dandelion_gong
  • 2016年03月04日 23:06
  • 730

java排序之shell排序

之前的几篇关于排序的算法都是比较简单的排序,虽然不一定可以写出来,但是一眼就可以看懂,接下来的几篇的排序可能就需要仔细思考一下,或者画图描绘一下了,这篇文章讲的死shell排序,也叫增量排序,它的本质...
  • justperseve
  • justperseve
  • 2016年04月27日 20:36
  • 804

Shell排序的原理与集体实现

希尔排序因计算机科学家Donald L. Shell而得名,他在1959年发现了希尔排序算法。希尔排序基于插入排序,但是增加了一个新的特性,大大地提高了插入排序的执行效率。       依靠这个特别的...
  • ecjtuync
  • ecjtuync
  • 2011年05月17日 14:01
  • 3504

排序:冒泡排序、快速排序、shell排序法

1、冒泡排序法 思路:整形数组a[n],要求把数组a按从小到大排列,采用冒泡排序法。 即:第一遍,目的--最小的数值放在a[0],从尾a[n-1]扫描到a[0],对于a[k] (0       ...
  • huguangshanse00
  • huguangshanse00
  • 2012年09月10日 15:52
  • 2034

八大排序学习之三希尔排序(Shell排序)

希尔排序也叫i缩小增量排序,是一种比较高效的排序算法。平均时间复杂度为O(n^1.3),最坏的情况也是O(n^2) 思想是隔着一定步长进行取出几组数据,对取出的几组数据进行直接插入排序。 举个栗子...
  • lishunihaoa
  • lishunihaoa
  • 2016年10月31日 14:35
  • 156

排序算法系列:Shell 排序算法

概述希尔排序(Shell Sort)是 D.L.Shell 于 1959 年提出来的一种排序算法,在这之前排序算法的时间复杂度基本都是 O(n2n^{2}) 的,希尔排序算法是突破这个时间复杂度的第一...
  • u013761665
  • u013761665
  • 2016年04月12日 00:54
  • 3937

八大排序算法-shell 排序

基本思想 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。 操作方法 选择一个增量序列t1,t2,…,...
  • qishouzhang
  • qishouzhang
  • 2015年07月26日 09:27
  • 4195

Shell排序和归并排序

转载http://blog.csdn.net/cjjky/article/details/7029141 希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。 希尔排序是...
  • tangkai177
  • tangkai177
  • 2012年04月17日 22:31
  • 285
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:shell排序
举报原因:
原因补充:

(最多只允许输入30个字)