算法學習記錄5 希爾排序

理解

基本和插入排序同樣,就是修改了插入排序裏一次須要排序元素的數量.java

 

實現

 1 package algorithm;
 2 
 3 import java.util.Arrays;
 4 
 5 /**
 6  * 希爾排序
 7  * 
 8  * @author jyzjyz12@163.com
 9  * @since 2017年3月7日 下午3:46:20
10  */
11 public class ShellSortTest1 {
12     public static void main(String[] args) {
13         int[] arr1 = { 4, 7, 5, 6, 1, 3, 8 };
14         int[] arr2 = { 7, 6, 5, 4, 3, 2, 1 };
15         int[] arr3 = { 5, 9, 3, 7, 8, 6, 1, 2, 4 };
16         int[] arr4 = { 13, 2, 5, 4, 88, 76, 68, 87, 55, 88, 88, 77, 67, 99, 100, 5, 53, 52, 51, 66 };
17         int[] arr5 = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 1 };
18         sort(arr1);
19         sort(arr2);
20         sort(arr3);
21         sort(arr4);
22         sort(arr5);
23         System.out.println(Arrays.toString(arr1));
24         System.out.println(Arrays.toString(arr2));
25         System.out.println(Arrays.toString(arr3));
26         System.out.println(Arrays.toString(arr4));
27         System.out.println(Arrays.toString(arr5));
28     }
29 
30     public static void sort(int[] arr) {
31         // 第一層for把一個大數組拆分紅了N個小數組,再每一個小數組裏進行插入排序,而後修改分組規則減少小數組長度,再進行拆分和插入排序,直到拆分的小數組長度爲2截止(相鄰2個元素進行插入排序)
32         for (int size = arr.length / 2; size >= 1; size = size / 2) {
33             // 下面這個for和插入排序的邏輯徹底同樣
34             for (int i = size; i < arr.length; i++) {
35                 // 不用whille用下面註釋掉的for循環也能夠.我用while是由於以前的插入排序用了while.這裏保持一致好記一點.
36                 // int value = arr[i];
37                 // int j = i - size;
38                 // for (; j >= 0; j = j - size) {
39                 // if (value >= arr[j]) {
40                 // break;
41                 // } else {
42                 // arr[j + size] = arr[j];
43                 // }
44                 // }
45                 // arr[j + size] = value;
46                 int value = arr[i];
47                 int j = i;
48                 while (j - size >= 0 && value < arr[j - size]) {
49                     arr[j] = arr[j - size];
50                     j = j - size;
51                 }
52                 arr[j] = value;
53             }
54         }
55     }
56 }
相關文章
相關標籤/搜索