zoukankan      html  css  js  c++  java
  • Java之希尔排序

    希尔排序

      前面已经知道了插入排序,明白插入排序的原理,不断比较来交换相邻的元素,这样的话效率不高,为此希尔排序,在插入排序上做出了改进,通过间隔增量来比较并交换元素,这样可以减少比较交换的次数。

     1 package com.yunche.testsort;
     2 
     3 import java.util.Arrays;
     4 
     5 /**
     6  * @ClassName: ShellSort
     7  * @Description:
     8  * @author: yunche
     9  * @date: 2018/11/30
    10  */
    11 public class ShellSort {
    12     public static void main(String[] args) {
    13         int[] a = {8, 9, 1, 7, 2, 3, 5, 4, 6, 0};
    14         new ShellSort().sort(a);
    15         System.out.println(Arrays.toString(a));
    16     }/*Output:
    17     [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    18     */
    19 
    20     private void sort(int[] a) {
    21         int len = a.length;
    22         for (int gap = len >> 1; gap > 0; gap = gap >> 1) {
    23 
    24             for (int i = gap; i < len; i++) {
    25                 for (int j = i; j > gap - 1; j = j - gap) {
    26                     //使当前元素找到属于自己的位置
    27                     if (a[j] < a[j - gap]) {
    28                         int temp = a[j];
    29                         a[j] = a[j - gap];
    30                         a[j - gap] = temp;
    31                     }
    32                 }
    33             }
    34         }
    35     }
    36 }

      可以和前面的插入排序的代码对比,可以发现希尔排序内部就是插入排序的代码,上面的代码24行开始的两个循环,和插入排序代码其实是一样的,将 gap 替换成 1 两者就一样了。

    插入排序

    for (int i = 1; i < len; i++) {
                for (int j = i; j > 0; j--) {
                    //使当前元素找到属于自己的位置
                    if (a[j] < a[j - 1]) {
                        int temp = a[j];
                        a[j] = a[j - 1];
                        a[j - 1] = temp;
                    }
                }
            }
  • 相关阅读:
    五、MapReduce 发布服务
    四、MapReduce 基础
    三、Hadoop 的 API
    二、HDFS 架构
    php身份证号的验证
    php性能优化
    PHP网站开发方案
    php一个不错的分页
    2013年最流行的php框架盘点
    程序员之路
  • 原文地址:https://www.cnblogs.com/yunche/p/10045124.html
Copyright © 2011-2022 走看看