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对比,位置不变。

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





相关文章推荐

C 冒泡Shell排序算法

  • 2015年09月18日 10:46
  • 1.43MB
  • 下载

java shell排序

  • 2013年06月24日 10:21
  • 1KB
  • 下载

shell排序法的C++实现

shell排序算法: shell排序算法的时间复杂度为o(n2),本文中的间隔每次除以2,若修改时间间隔,那么就可以得到更加优化的时间代价 shell排序算法基于插入排序的两个性质: 1、小序列...

shell排序shellsort

  • 2014年06月15日 12:12
  • 344B
  • 下载

shell排序的c实现

shell排序是插入排序的一种,是插入排序 的一种高速而稳定的改进版本, 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成(n除以d1)个组。所有距离为d1的倍数的记录放在同一个组中。...

shell排序 (工程)

  • 2014年07月03日 22:39
  • 31.67MB
  • 下载

希尔排序 又称shell排序

  • 2011年05月13日 13:28
  • 626B
  • 下载

SHELL排序

插入排序的算法复杂度为O(n2),但如果序列为正序可提高到O(n),而且直接插入排序算法比较简单,希尔排序利用这两点得到了一种改进后的插入排序。 一. 算法描述 希尔排序:将无序数...

数据结构基础(12)------------Shell排序

数据结构基础(11)------------Shell排序 1.Shell排序是DL. Shell于1959年针对直接插入排序算法改进提出的,属于插入排序的范畴,是对直接插入排序算法的改进。直接插...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:shell排序
举报原因:
原因补充:

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