• 希尔排序


    希尔排序

    希尔排序(Shell Sort)是插入排序的一种。也称缩小增量(gap)的排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是不稳定的算法

    希尔排序没有 快速排序算法快 O(n(logn)),因此中等大小规模表现良好,对规模非常大的 数据排序不是最优选择。

    希尔排序非常容易实现,算法代码短而简单。 此外,希尔算法在最坏的情况下和平均情况下执行效率相差不是很多,与此同时快速排序在最坏的情况下执行的效率会非常差。专家们提倡,几乎任何排序工作在开始时都可以用希尔排序,若在实际使用中证明它不够快,再改成快速排序这样更高级的 排序算法

    增量:

    好的 增量序列的共同特征:    最后一个 增量必须为1;

    举例:n=10

    49, 38, 65, 97, 26, 13, 27, 49, 55, 4

    gap = n;

    gap = gap/2;

    49-13  38-27  65-49  97-55  26-4

    排序后:13  27  49  55  4  49  38  65  97  26

    gap = gap/2;

    13-49  27-55  49-4  55-49  4-38  49-65  38-97  65-26

    排序后:4   26   13   27   38    49   49   55   97   65

    gap = gap/2;

    排序后:4   13   26   27   38    49   49   55   65   97

    代码:(从小到大)

    #include <stdio.h>
    //3 7 6 5 1 0
    //3 5
    //7 1
    //6 0
    
    //7 6 5 3 1 0
    void aaa(int a[],int n)
    {
        int gap = n,flag = 0;
        int i,j,t;
        while(gap > 1)
        {
            gap /= 2;
            do
            {
                flag = 0;
                for(i=0;i<n-gap;i++)
                {
                    j = gap+i;
                    if(a[j]<a[i])
                    {
                        t = a[j];
                        a[j] = a[i];
                        a[i] = t;
                        flag = 1;
                    }
                }
            }while(flag != 0);
        }
    
    
    }
    int main()
    {
        int i,j,t;
        int a[12]={0};
        for(i=0;i<6;i++)
        {
            scanf("%d",&a[i]);
        }
        aaa(a,6);
        for(i=0;i<6;i++)
        {
            printf("%d ",a[i]);
        }
    
        return 0;
    }
  • 相关阅读:
    Windows各个文件夹介绍
    Zabbix使用外部命令fping处理ICMP ping的请求
    QT 样式表实例
    QT 样式表基础知识
    cocos2d-js入门一
    try throw catch typeid
    cocos2d-x入门三 分层设计框架
    cocos2d-x入门二 helloworld实例运行与创建
    cocos2d-x入门一
    批量操作QT UI中的控件
  • 原文地址:https://www.cnblogs.com/ldy-miss/p/6023748.html
Copyright © 2020-2023  润新知