java算法----排序----(6)希尔排序(最小增量排序)

 1 package log;
 2 
 3 public class Test4 {
 4 
 5     /**
 6      * java算法---希尔排序(最小增量排序)
 7      * 
 8      * @param args
 9      */
10     public static void main(String[] args) {
11         // 需要排序的数组
12         int arr[] = { 49, 20, 36, 51, 18, 94, 61, 31, 50 };
13         double d1 = arr.length;
14         int temp = 0;
15         // 循环输出该数组内容
16         System.out.println("排序之前:");
17         for (int a : arr) {
18             System.out.print(a + "	");
19         }
20         System.out.println();
21 
22         while (true) {
23             d1 = Math.ceil(d1 / 2) % 2 == 0 ? Math.floor(d1 / 2) : Math.ceil(d1 / 2);
24             int d = (int) d1;
25             for (int x = 0; x < d; x++) {
26                 for (int i = x + d; i < arr.length; i += d) {
27                     int j = i - d;
28                     temp = arr[i];
29                     for (; j >= 0 && temp < arr[j]; j -= d) {
30                         arr[j + d] = arr[j];
31                     }
32                     arr[j + d] = temp;
33                 }
34             }
35             if (d == 1) {
36                 break;
37             }
38 
39         }
40 
41         // 循环输出该数组内容
42         System.out.println("排序之后:");
43         for (int a : arr) {
44             System.out.print(a + "	");
45         }
46         System.out.println();
47 
48     }
49 
50 }

原文地址:https://www.cnblogs.com/javallh/p/8762412.html