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

    题解:希尔排序,冒泡排序可以看作dk = 1的希尔排序。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int a[11234],b[11234],n;
    
    void sort(int a[],int x)
    {
        int i,j,t;
        for(i=0;i<n-x+1;i++)
        {
            for(j=0;j<n-i-x;j++)
                if(a[j]>a[j+x])
                {
                    t = a[j];
                    a[j] = a[j+x];
                    a[j+x] = t;
                }
        }
    }
    
    int main()
    {
        int i;
        while(scanf("%d",&n)!=EOF)
        {
            for(i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
                b[i] = a[i];
            }
            sort(a,n/2);
            for(i=0;i<n;i++)
                printf("%d%c",a[i],i==n-1?'
    ':' ');
            sort(b,1);
            for(i=0;i<n;i++)
                printf("%d%c",b[i],i==n-1?'
    ':' ');
        }
        return 0;
    }
    
    
  • 相关阅读:
    Laravel 通知
    LARAVEL 6 + VUE + SEMANTIC UI
    Laravel 从入门到精通教程【预备篇、基础篇】
    Laravel Vue.js 聊天室
    GIT代码管理: git remote add 【转载】
    Laravel Vuejs 实战:开发知乎 (45-47)用户设置
    Laravel Vuejs 实战:开发知乎 (42-44)用户头像
    如何在运行时更改JMeter的负载
    Jmeter Grafana Influxdb 环境搭建
    实时结果
  • 原文地址:https://www.cnblogs.com/luoxiaoyi/p/10156277.html
Copyright © 2011-2022 走看看