太自由

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1. 直接插入排序算法适用于基本有序的排序表和数据量不大的排序表。希尔排序有称之为缩小增量排序。

2. 下面这个视频分析的很详细

https://www.bilibili.com/video/BV14r4y1F71a?p=66

3. 希尔排序代码

 1 package cn.sun.it.review;
 2 
 3 import java.util.Arrays;
 4 import java.util.Scanner;
 5 
 6 public class ShellSort {
 7 
 8     public static void main(String[] args) {
 9         // 测试数据:5,3,6,2,1,9,4,8,7
10         System.out.println("请输入若干个整数,以逗号分隔:");
11         Scanner sc = new Scanner(System.in);
12         String strNums = sc.nextLine();
13         String[] tempArrNums = strNums.split(",");
14         int[] arr = new int[tempArrNums.length];
15         for (int i = 0; i < arr.length; i++) {
16             arr[i] = Integer.valueOf(tempArrNums[i]);
17         }
18         System.out.println("排序前:" + Arrays.toString(arr));
19         shellSort(arr);
20         System.out.println("排序后:" + Arrays.toString(arr));
21     }
22 
23     // 插入排序之希尔排序
24     private static void shellSort(int[] arr) {
25         int temp;
26         for(int gap=arr.length/2;gap>0;gap/=2){
27             for(int i = gap;i<arr.length;i++){
28                 temp = arr[i];
29                 int j;
30                 for(j=i;j>=gap && arr[j-gap]>temp;j-=gap){
31                     arr[j] = arr[j-gap];
32                 }
33                 arr[j] = temp;
34             }
35         }
36     }
37 
38 }

4. 希尔排序性能

(4.1)空间复杂度:仅适用了常量个辅助单元,空间复杂度为O(1);

(4.2)由于希尔排序的时间复杂度依赖于增量序列的函数,这涉及数学上尚未解决的难题,所以其时间复杂度分析比较困难。当n在某个特定范围是,希尔排序的时间复杂度约为O(n1.3),最坏情况下希尔排序时间复杂度为O(n2)

(4.3)稳定性:不稳定

posted on 2021-04-01 16:18  太自由  阅读(94)  评论(0编辑  收藏  举报