zoukankan      html  css  js  c++  java
  • 算法学习记录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 }
  • 相关阅读:
    mod_rewrite
    敏捷开发
    转python和ruby的相同点
    ESB总线知识小结
    使用 squid 2.7 for windows 进行无缓存反向代理
    初探K2workflow
    没激情的工作
    多易拍 二次开发
    查看数二进制代码片段
    生成随机数
  • 原文地址:https://www.cnblogs.com/abcwt112/p/6515392.html
Copyright © 2011-2022 走看看