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

        本文由广州疯狂软件java培训分享:

      希尔排序是在插入排序的基础上进行优化,主要是减少插入次数。 例子中使用的待排序数据 {3, 32, 1, 55, 0, 3, 9}排序规则是从左到右,从小到大排序,正确排序的结果:{0, 1, 3, 3, 9, 32, 55}

      一、希尔排序源码

      public class ShellSort {

      public void shellSort(int array[]) {

      if (array == null) {

      throw new NullPointerException();

      }

      // 1 选择步长

      for (int gap = array.length / 2; gap > 0; gap/=2) {

      // 2 对所有组进行遍历

      for (int i = 0; i < gap; i++) {

      // 3 遍历组内所有元素

      for (int j = i + gap; j < array.length; j += gap) {

      // 4 组内元素比较大小

      if (array[j - gap] > array[j]) {

      // 5 插入排序

      int insertValue = array[j];

      int k = j - gap;

      while (k >= 0 && array[k] > insertValue) {

      array[k + gap] = array[k];

      k -= gap;

      }

      array[k + gap] = insertValue;

      }

      }

      }

      }

      }

      public static void main(String[] args) {

      int[] array = {3, 32, 1, 55, 0, 3, 9};

      ShellSort shellSort = new ShellSort();

      shellSort.shellSort(array);

      System. out.println( Arrays.toString( array ) );

      }

      }

      二、希尔排序逐步解释

      1. 选择步长

      for (int gap = array.length / 2; gap > 0; gap/=2) {}

      什么是步长? 相隔几个元素进行比较,如果步长的规则是 gap = array.length / 2, gap /= 2; 每次都除以2,例子的步长选择就是: 数组长度 length = 7,所有步长分别是 3, 1 gap = 7/2 = 3 gap = 3/2 = 1

      2. 对所有组进行遍历

      for (int i = 0; i < gap; i++) {}

      当前操作是嵌套在1中,即步长为3的时候执行一次,步长为1的时候执行一次。1中计算出步长(gap)的值分别是3, 1。

      gap取值 i取值

      3 0,1,2

      1 1

      疯狂软件教育中心依托开发团队的强大技术实力,把企业最新技术融入实训课程,打造金牌的品质,才能给予学员黄金的未来,疯狂软件凭借过硬的技术实力与丰富的项目开发经验,赢得了社会的肯定。疯狂软件Java培训师资力量强大,课程内容深入,为学员高薪就业做了很好的铺垫,拥有丰富就业指导经验的就业团队也成为了学员高薪就业的先天优势。地址:广州天河区车陂沣宏大厦3楼。

  • 相关阅读:
    023-Spring Boot 服务的注册和发现
    022-Spring Boot 构建微服务实战
    021-Spring Boot 测试,Junit方式使用,mock方式,Controller测试
    020-Spring Boot 监控和度量
    003-Spring 中的StreamUtils
    004-微信证书问题
    019-Spring Boot 日志
    018-Spring Boot Starter开发
    017-Spring Boot AOP
    016-Spring Boot JDBC
  • 原文地址:https://www.cnblogs.com/gojava/p/3614044.html
Copyright © 2011-2022 走看看