自学内容网 自学内容网

利用c语言详细介绍下希尔排序

    希尔排序是针对插入排序的优化算法。它是缩少增量的算法,一开始增量从元素个数len/2的增量开始,然后缩小增量gap=gap/2,直到gap为1,最终完成序列排序。

一、图文介绍

    我们还是使用数组【10,5,3,20,1],排序使用升序的方式,小的元素在前,大的元素在后:

1.1,内循环第一遍

    初始增量为gap=length/2=5/2=2,所以我们第一遍数组第三元素(我们用a[2]表示,后面也是)和a【0】比对,a[3]和a[1]比对,a[4]和a[2]比对再与a[0]比对。

1.2,内循环第二遍

    内循环第二部,增量变为gap=gap/2=2/2=1,这个时候就变成插入排序了,我们根据前面排序出来的结果,列出结果(插入排序前面我们有介绍,我们简单图陈列下过程):

     第一次:

    第二次:

 

    第三次:

 

    第四次:

 

二、算法实现

2.1,希尔排序

    我们用c语言写一个希尔排序算法的函数:

int * shellSort(int *arr,int len)
{
    int cur;
    for(int gap = len/2; gap > 0; gap = gap/2)
    {
        for(int i = gap;i < len;i++)
        {
            int j = i;
            cur = arr[i];
            while(j - gap >= 0 && cur < arr[j - gap])
            {
                arr[j] = arr[j - gap];
                j = j - gap;
            }
            arr[j] = cur;
        }
    }
    return arr;
}

2.2,程序测试:

int main() {

    int a[]={10,5,3,20,1};
    int *p = shellSort(a,5);
    printf("the array a after sort is ");
    for(int i=0;i<5;i++){
        printf("%d ", *(p++));
    }

}


原文地址:https://blog.csdn.net/tpc4289/article/details/143961981

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!