zoukankan      html  css  js  c++  java
  • 算法篇---Shell排序(希尔)算法

    先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<;…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
    该方法实质上是一种分组插入方法。
    原理图:
    源代码
     1 package com.zc.manythread;
     2 /**
     3  * 
     4  * @author 偶my耶
     5  *
     6  */
     7 public class ShellSort {
     8     public static int count = 0;
     9 
    10     public static void shellSort(int[] data) {
    11         // 计算出最大的h值
    12         int h = 1;
    13         while (h <= data.length / 3) {
    14             h = h * 3 + 1;
    15         }
    16         while (h > 0) {
    17             for (int i = h; i < data.length; i += h) {
    18                 if (data[i] < data[i - h]) {
    19                     int tmp = data[i];
    20                     int j = i - h;
    21                     while (j >= 0 && data[j] > tmp) {
    22                         data[j + h] = data[j];
    23                         j -= h;
    24                     }
    25                     data[j + h] = tmp;
    26                     print(data);
    27                 }
    28             }
    29             // 计算出下一个h值
    30             h = (h - 1) / 3;
    31         }
    32     }
    33 
    34     public static void print(int[] data) {
    35         for (int i = 0; i < data.length; i++) {
    36             System.out.print(data[i] + "	");
    37         }
    38         System.out.println();
    39     }
    40     public static void main(String[] args) {
    41 
    42         int[] data = new int[] { 4, 3, 6, 2, 1, 9, 5, 8, 7 };
    43         print(data);
    44         shellSort(data);
    45         print(data);
    46 
    47     }
    48 }

    运行结果:

    Shell排序是不稳定的,它的空间开销也是O(1),时间开销估计在O(N3/2)~O(N7/6)之间

  • 相关阅读:
    2.Liunx 系统设置
    1.Liunx 文件管理
    Liunx 更新环境时用到的命令
    解决SSH Secure Shell 连接Liunx 有乱码情况。
    JMeter 性能测试基本过程及示例(4)
    在 macOS 中怎样获取当前文件夹的路径?
    Mac环境安装启动jmeter
    StringUtils工具类常用方法汇总1(判空、转换、移除、替换、反转)
    Json与Gson
    Quartz的基本使用之入门(2.3.0版本)
  • 原文地址:https://www.cnblogs.com/oumyye/p/4199449.html
Copyright © 2011-2022 走看看