zoukankan      html  css  js  c++  java
  • 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\n",a[i]);
            }
            Shellsort2(b,n);
            for(i=0;i<n;i++)
            {
                i<n-1? printf("%d ",b[i]):printf("%d\n",b[i]);
            }
        }
        return 0;
    }
    
    
    /***************************************************
    Result: Accepted
    Take time: 0ms
    Take Memory: 208KB
    ****************************************************/
  • 相关阅读:
    代码那些事儿之葫芦娃救爷爷
    《数学计算出题系统》功能规格说明书
    有点难
    肝不动了
    so easy, too happy
    新学期的展望
    Android Gradle插件
    重学数据结构和算法(三)之递归、二分、字符串匹配
    重学数据结构和算法(二)之二叉树、红黑树、递归树、堆排序
    重学数据结构和算法(一)之复杂度、数组、链表、栈、队列、图
  • 原文地址:https://www.cnblogs.com/syycjh/p/9513672.html
Copyright © 2011-2022 走看看