算法学习记录5 希尔排序

理解

基本和插入排序一样,就是修改了插入排序里一次需要排序元素的数量.

 

实现

 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 }

 

posted @ 2017-03-07 16:23  abcwt112  阅读(129)  评论(0编辑  收藏  举报