• 希尔排序


    直接插入排序适用于基本有序的排序表和数据量不大的排序表。

    希尔排序(Shell)又叫缩小增量排序

    基本思想如下:

    -设待排序列有n个元素,取一整数gap(gap<n)作为间隔,将全部元素分为gap个子序列,所有距离为gap的元素放在同一个子序列中
    -在每一个子序列中分别采用直接插入排序
    -然后缩小间隔gap,例如取gap = gap/2,重复上述的子序列划分和排序工作
    -直到最后取gap = 1,将所有元素放在同一个序列中排序为止

    代码如下

     1 // shell排序.cpp: 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include <iostream>
     6 #include <random>
     7 
     8 using namespace std;
     9 
    10 #define LENGTH(a)  (sizeof(a)/sizeof(a[0]))//获取数组维度
    11 
    12 int Shell_sort(int *A, int n)
    13 {
    14     int key,j;
    15     for (int dk = n / 2; dk >= 1; dk /= 2)//dk为每次排序子序列的间隔
    16     {
    17         for (int i = dk; i < n; i++)
    18         {
    19             if (A[i] < A[i - dk])//按升序排列
    20             {
    21                 key = A[i];
    22                 j = i - dk;
    23                 while (j >= 0 && A[j] > key)
    24                 {
    25                     A[j + dk] = A[j];
    26                     j -= dk;
    27                 }
    28                 A[j + 1] = key;
    29             }
    30         }
    31     }
    32     return 0;
    33 }
    34 
    35 int main()
    36 {
    37     default_random_engine e;
    38     uniform_int_distribution<unsigned> u(0, 100);//便于测试方便,以后的数据全部用随机数
    39     int test[15] = { 0 };
    40     for (int i = 0; i < 15; i++)
    41     {
    42         test[i] = u(e);
    43     }
    44     cout << "排序之前的数组序列: ";
    45     for (auto c : test)
    46         cout << c << ends;
    47     cout << endl;
    48 
    49     Shell_sort(test, LENGTH(test));
    50 
    51     cout << "排序之后的数组序列: ";
    52     for (int i = 0; i < LENGTH(test); i++)
    53     {
    54         cout << test[i] << ends;
    55     }
    56     cout << endl;
    57     return 0;
    58 }

    运行结果如下:

     

  • 相关阅读:
    开发中学习英语
    eclipse 常用快捷键
    eclipse 查看快捷键
    沟通的方式——大道至简第四章读后感
    java练习题——类与对象
    团队与管理方法——大道至简第三章读后感
    java程序——两数的加减乘除
    java练习题
    java程序——从命令行接收多个数字,求和之后输出结果
    李冰烧山——大道至简第二章读后感
  • 原文地址:https://www.cnblogs.com/njuxjx/p/9369699.html
Copyright © 2020-2023  润新知