zoukankan      html  css  js  c++  java
  • 希尔排序

    希尔排序(Java)

    声明:文章参考https://blog.csdn.net/weixin_49561445/article/details/114830602

    一、原理

    希尔排序是基本插入排序的升级优化版,希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止

    希尔排序图解

     

    二、时间复杂度(不稳定)

      时间复杂度约为O(n1.3)

    三、代码实现(希尔插入排序)

     1 /**
     2      * 希尔排序,选择一个间隔,然后进行比较交换
     3      */
     4     public static void sort(int[] arr) {
     5         //初始化一个间隔
     6         int interval = 1;
     7         System.out.println("arr.length/3 = " + arr.length/3);
     8         //计算最大间隔
     9         while (interval < arr.length / 3) {
    10             interval = interval * 3 + 1;
    11         }
    12         System.out.println("间隔 = " + interval);
    13         int n = 0;
    14         while(interval > 0) {
    15             //进行插入排序
    16             int tmp = 0;
    17             for (int i = interval; i < arr.length; i++) {
    18                 tmp = arr[i];
    19                 int j = i;
    20                 while (j > interval - 1 && arr[j - interval] >= tmp) {
    21                     arr[j] = arr[j - interval];
    22                     j -= interval;
    23                     n++;
    24                 }
    25                 arr[j] = tmp;
    26             }
    27             //减少间隔
    28             interval = (interval - 1) / 3;
    29         }
    30         System.out.println("循环次数:" + n);
    31     }
    32 
    33     @Test
    34     public void shellSort(){
    35         int[] arr = new int[15];
    36         for (int i = 0; i < arr.length; i++) {
    37             arr[i] = (int) (Math.random()*100);
    38         }
    39         System.out.println("------原始数据------\n"+
    40                 Arrays.toString(arr));
    41         sort(arr);
    42         System.out.println("------排序结果-------");
    43         System.out.println(Arrays.toString(arr));
    44     }
  • 相关阅读:
    RichEdit
    用 RAD Studio 柏林版创建 IoT 应用程序
    延时程序
    SQL if exists用法
    Firemonkey限制TEdit只能输入数字的完美方法
    leetcode 树
    leetcode string
    clone-graph
    surrounded-regions merge-intervals
    leetcode链表题
  • 原文地址:https://www.cnblogs.com/xiayiLL/p/15652714.html
Copyright © 2011-2022 走看看