希尔排序--C语言

  近期由于身体不适,好久不曾写博客了。但是觉得生病不应该成为不学习的借口,所以今天开始还是继续自己的学习之旅。因为一旦停的时间久了,借口会越来越多,最后重蹈覆辙,之前的努力又白费了。
  今天写的是希尔排序。希尔排序是插入排序的一种。它将待排序的数组按照一定间隔分为若干个子序列,对每个子序列分别进行直接插入排序。然后缩小间隔,继续上述过程,直至间隔为1,则为普通插入排序。
算法代码如下:

#include <stdio.h>

//data为待排序数组,interval为开始间隔,len为数组长度
void shellInsert(int data[],int interval,int len)
{
    int i = 0;
    int j = 0;
    for(i = interval + 1;i < len;i++)
    {
        if(data[i] < data[i - interval])
        {
            data[0] = data[i];
            for(j = i - interval;j > 0 && (data[j] > data[0]);j = j - interval)
            {
                data[j + interval] = data[j];
            }
            data[j + interval] = data[0];
        }
    }
}

//data为待排序数组,interval为间隔数组,len1为代排序数组长度,len2为间隔数组长度
void shellSort(int data[],int interval[],int len1,int len2)
{
    int i = 0;
    for(i = 0;i < len2;i ++)
    {
        shellInsert(data,interval[i],len1);
    }
}

int main()
{
    int i = 0;
    int data[] = {0,35,42,25,19,33,24,58,66,34,20};
    int interval[] = {5,3,1};
    for(i = 1;i < 11;i++)
    {
        printf("%d ",data[i]);
    }
    printf("\n");
    shellSort(data,interval,11,3);
    for(i = 1;i < 11;i ++)
    {
        printf("%d ",data[i]);
    }
    printf("\n");
    return 0;
}

  一周没有敲代码便已经生疏了,倘若真是过了一个月都不写的话估计连最基本的东西都写不出来了。即时记忆力再好,也不如天天练习靠谱!以后风雨无阻,全年无休,坚持自己的代码之路~

猜你喜欢

转载自blog.csdn.net/lei2014lei/article/details/86065992