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楼。

  • 相关阅读:
    Asp.Net Web API 2第八课——Web API 2中的属性路由
    Asp.Net Web API 2第七课——Web API异常处理
    Asp.Net Web API 2第六课——Web API路由和动作选择
    Asp.Net Web API 2第五课——Web API路由
    开始学习python
    BMI 小程序 购物车
    深浅copy 文件操作
    字典 dict 集合set
    基本数据类型 (str,int,bool,tuple,)
    python 运算符
  • 原文地址:https://www.cnblogs.com/gojava/p/3614044.html
Copyright © 2011-2022 走看看