• SDUT 3403 数据结构实验之排序六:希尔排序


     

    数据结构实验之排序六:希尔排序

    Time Limit: 1000 ms Memory Limit: 65536 KiB

    Problem Description

    我们已经学习了各种排序方法,知道在不同的情况下要选择不同的排序算法,以期达到最好的排序效率;对于待排序数据来说,若数据基本有序且记录较少时, 直接插入排序的效率是非常好的,希尔排序就是针对一组基本有序的少量数据记录进行排序的高效算法。你的任务是对于给定的数据进行希尔排序,其中增量dk=n/(2^k)(k=1,2,3……)

    Input

    连续输入多组数据,每组输入数据的第一行给出一个正整数N(N <= 10000),随后连续给出N个整数表示待排序关键字,数字间以空格分隔。

     

    Output

    输出dk=n/2和dk=1时的结果。

    Sample Input

    10
    10 9 8 7 6 5 4 3 2 1
    10
    -5 9 7 -11 37 -22 99 288 33 66

    Sample Output

    5 4 3 2 1 10 9 8 7 6
    1 2 3 4 5 6 7 8 9 10
    -22 9 7 -11 37 -5 99 288 33 66
    -22 -11 -5 7 9 33 37 66 99 288

    提示:希尔排序是基于增量的排序,简单来说就是将第1个数与第1+增量个数进行排序,依次向下进行,一直到排完为止

    代码实现如下(g++):
    #include<bits/stdc++.h>
    
    using namespace std;
    
    int a[10010];
    int b[10010];
    int d;
    
    void Shellsort1(int a[],int n)//希尔排序
    {
        d=n/2;//增量为n/2
        int i,j,t;
        for(i=d;i<n;i++)
        {
            for(j=i-d;j>=0;j--)
            {
                if(a[j]>a[j+d])
                {
                    t=a[j];
                    a[j]=a[j+d];
                    a[j+d]=t;
                }
            }
        }
    }
    
    void Shellsort2(int a[],int n)
    {
        d=1;//增量为1
        int i,j,t;
        for(i=d;i<n;i++)
        {
            for(j=i-d;j>=0;j--)
            {
                if(a[j]>a[j+d])
                {
                    t=a[j];
                    a[j]=a[j+d];
                    a[j+d]=t;
                }
            }
        }
    }
    
    int main()
    {
        int n;
        int i;
        while(~scanf("%d",&n))
        {
            for(i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
                b[i]=a[i];
            }
            Shellsort1(a,n);
            for(i=0;i<n;i++)
            {
                i<n-1? printf("%d ",a[i]):printf("%d
    ",a[i]);
            }
            Shellsort2(b,n);
            for(i=0;i<n;i++)
            {
                i<n-1? printf("%d ",b[i]):printf("%d
    ",b[i]);
            }
        }
        return 0;
    }
    
    
    /***************************************************
    Result: Accepted
    Take time: 0ms
    Take Memory: 208KB
    ****************************************************/
  • 相关阅读:
    HTTP 与 HTTPS 的区别
    cookie 和session 的区别详解
    IntelliJ远程调试教程
    selenium 自动化测试面试题及答案
    性能测试总结(一)---基础理论篇(转载)
    性能测试总结(二)---测试流程篇(转载)
    性能测试总结(三)--工具选型篇
    eclipse调试的基本意义
    控制反转(IOC)和依赖注入(DI)
    前端框架layui
  • 原文地址:https://www.cnblogs.com/jkxsz2333/p/9513672.html
Copyright © 2020-2023  润新知