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

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

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

Time Limit: 1000 ms Memory Limit: 65536 KiB

SubmitStatistic

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


Hint

 

Source

xam

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int n;
int a[10005],  b[10005];
void shellsort(int a[], int n, int dk)
{
    int i, j, t;
    for(i = dk; i < n; i++)
    {
        for(j = i-dk; j >= 0; j-=dk)
        {
            if(a[j] > a[j + dk])
            {
                t = a[j];
                a[j] = a[j+dk];
                a[j+dk] = t;
            }
        }
    }
}
int main()
{
    int i;
    while(scanf("%d", &n) != EOF)
    {
        for(i = 0; i < n; i++)
        {
            scanf("%d", &a[i]);
            b[i] = a[i];
        }
        shellsort(a, n, n/2);
        int i;
        for(i = 0; i < n; i++)
        {
            if(i == n - 1)
            {
                printf("%d\n", a[i]);
            }
            else
            {
                printf("%d ", a[i]);
            }
        }
        shellsort(b,n,1);
         for(i = 0; i < n; i++)
        {
            if(i == n - 1)
            {
                printf("%d\n", b[i]);
            }
            else
            {
                printf("%d ", b[i]);
            }
        }
    }
    return 0;
}


相关文章
|
1天前
|
算法 Java 调度
Java数据结构与算法:拓扑排序
Java数据结构与算法:拓扑排序
|
6天前
|
算法 搜索推荐
数据结构算法--6 希尔排序和计数排序
**希尔排序**是插入排序的改进版,通过分组插入来提高效率。它逐步减少元素间的间隔(增量序列),每次对每个间隔内的元素进行插入排序,最终增量为1时进行最后一次直接插入排序,实现整体接近有序到完全有序的过程。例如,对数组`5, 7, 4, 6, 3, 1, 2, 9, 8`,先以间隔`d=4`排序,然后`d=2`,最后`d=1`,完成排序。计数排序则适用于0到100的数值,通过统计每个数出现次数,创建对应计数数组,再根据计数重建有序数组,时间复杂度为`O(n)`。
|
10天前
|
搜索推荐 算法
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
TU^
|
13天前
|
搜索推荐 算法 测试技术
数据结构~~排序
数据结构~~排序
TU^
10 1
|
13天前
|
搜索推荐 算法 测试技术
数据结构——排序
数据结构——排序
10 1
|
20天前
|
存储 算法 数据挖掘
数据结构实验||约瑟夫环
数据结构实验||约瑟夫环
|
20天前
|
存储 算法 数据安全/隐私保护
【Python学习篇】Python实验小练习——高级数据结构(五)
【Python学习篇】Python实验小练习——高级数据结构(五)
34 1
|
21天前
|
搜索推荐 算法 Shell
数据结构和算法——排序算法的比较和排序综测测验
数据结构和算法——排序算法的比较和排序综测测验
8 0
|
21天前
|
算法 C语言
数据结构和算法——桶排序和基数排序(图示、伪代码、多关键字排序,基数排序代码)
数据结构和算法——桶排序和基数排序(图示、伪代码、多关键字排序,基数排序代码)
11 0
|
2天前
【海贼王的数据航海】栈和队列
【海贼王的数据航海】栈和队列
4 0