zoukankan      html  css  js  c++  java
  • 八种排序整理(二)----希尔排序

    基本概念:希尔排序也称为“缩小增量排序”,基本原理是:首先将待排序的元素分为多个子序列使得每个子序的

    元素个数相对较少,对各个子序分别进行直接插入排序,待整个待排序序列“基本有序后”,再对所有元素进行一

    次直接插入排序。

    具体步骤如下:

             (1)选择一个步长序列t1, t2, ..., tk,满足ti > tj(i <j),tk = 1。
             (2)按步长序列个数k,对待排序序列进行k趟排序。
             (3)每趟排序,根据对应的步长ti,将待排序的序列分割成ti个子序列,分别对各个子序列进行直接插入排序。

    希尔排序的特点:

    稳    定    性:不稳定。

    时间复杂度:希尔排序的时间复杂性在O(nlog2n)和O(n2 )之间,大致为O(n1.3)。

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 void ShellSort(int array[], int length)
     6 {
     7     int i, j;
     8     int h;
     9     int temp;
    10 
    11     for (h = length / 2; h > 0; h = h / 2)
    12     {
    13         for (i = h; i < length; i++)
    14         {
    15             temp = array[i];
    16 
    17             for (j = i - h; j >= 0; j -=h)
    18             {
    19                 if (temp < array[j])
    20                 {
    21                     array[j + h] = array[j];
    22                 }
    23                 else
    24                 {
    25                     break;
    26                 }
    27             }
    28             array[j + h] = temp;
    29         }
    30     }
    31 }
    32 
    33 int main()
    34 {
    35     int i = 0;
    36     int a[] = {0, 5, 2, 4, 3, 1, 7, 6, 8, 9};
    37     int length = sizeof (a) / sizeof(a[0]);
    38 
    39     ShellSort(a, length);
    40 
    41     for (i = 0; i < length; i++)
    42     {
    43         printf("%d ", a[i]);
    44     }
    45     printf("
    ");
    46     while(1);
    47     return 0;
    48         
    49 }
  • 相关阅读:
    SpringBoot返回json和xml
    Spring boot 集成MQ
    Spring boot freemarker 配置
    Spring boot 自定义注解标签记录系统访问日志
    RIDE对应驱动下载
    在线修改pdf识别图片
    记公司食堂收厨余垃圾的人
    [Ruby]使用Ruby抓取网页及加工处理
    [转载]SCSS 和 SASS 和 HAML 和CoffeeScript
    [ACM]反复平方法的两种写法
  • 原文地址:https://www.cnblogs.com/kutoli/p/8329147.html
Copyright © 2011-2022 走看看