java 算法之希尔排序详解及实现代码

 更新时间:2017年03月01日 16:04:22   投稿:lqh  
这篇文章主要介绍了java 算法之希尔排序详解及实现代码的相关资料,需要的朋友可以参考下

java 算法之希尔排序

一、思想

希尔排序:使数组中任意间隔为h的元素都是有序的。在进行排序的时候,如果h很大,我们就能将元素移动到很远的地方,为实现更小的h有序创造方便。用这种方式,对任意以1结尾的h序列,我们都能够将数据排序; 

 二、概念

h有序数组:任意间隔为h的元素都是有序的数组; 

三、高效原因

对于大规模乱序数组插入排序很慢,因为它只会交换相邻的元素,因此元素只能一点一点地从数组的一端移动到另一段;

  希尔排序更高效的原因:它权衡了子数组的规模和有序性,在排序之初,各个子数组都很短;在排序之后子数组都是部分有序的,这两种情况很适合插入排序;  

四、代码

/** 
 * 希尔排序 
 *  
 * @author pengcx 
 *  
 */  
public class Shell extends Sort {  
  public static void main(String[] args) {  
    String[] a = { "d", "a", "w", "b", "q" };  
    Shell.sort(a);  
    show(a);  
  }  
  
  /** 
  * 排序数组a 
  *  
  * @param a 
  *      排序的数组a 
  */  
  protected static void sort(Comparable[] a) {  
    int N = a.length;  
    int h = 1;  
    while (h < N / 3) {  
      h = 3 * h + 1;  
    }  
  
    while (h >= 1) {  
      for (int i = 0; i < N; i++) {  
        for (int j = i; j >= h && less(a[j], a[j - h]); j -= h) {  
          exch(a, j, j - h);  
        }  
      }  
      h = h / 3;  
    }  
  }  
}  

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • JDK 7U15在 Windows x86平台下的安装方法

    JDK 7U15在 Windows x86平台下的安装方法

    本文给大家分享的是如何在windows平台下安装JDK最新版的方法,十分的简单全面,有需要的小伙伴可以参考下
    2016-05-05
  • SpringBoot获取配置文件的简单实现方法

    SpringBoot获取配置文件的简单实现方法

    这篇文章主要给大家介绍了关于SpringBoot如何获取配置文件的简单实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-05-05
  • Java进阶之Object类及常用方法详解

    Java进阶之Object类及常用方法详解

    Object 类是 Java 默认提供的一个类,是所有 Java 类的祖先类,每个类都使用 Object 作为父类。本文就来和大家聊聊Object类的常用方法,希望对大家有所帮助
    2023-01-01
  • 一篇文章彻底理解SpringIOC、DI

    一篇文章彻底理解SpringIOC、DI

    这篇文章主要给大家介绍了关于对SpringIOC、DI的理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • SpringBoot整合Mail轻松实现邮件自动推送功能

    SpringBoot整合Mail轻松实现邮件自动推送功能

    在项目中经常会遇到SpringBoot推送消息的业务,除了站内推送通知,邮件推送也是一种常见的方式,本文小编就给大家介绍了SpringBoot整合Mail轻松实现邮件自动推送功能,需要的朋友可以参考下
    2024-12-12
  • SpringBoot如何正确配置并运行Kafka

    SpringBoot如何正确配置并运行Kafka

    这篇文章主要介绍了SpringBoot如何正确配置并运行Kafka问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • SpringBoot启动后执行方法的五种实现方式

    SpringBoot启动后执行方法的五种实现方式

    本文介绍了SpringBoot中五种在项目启动后执行方法的方式,包括实现CommandLineRunner和ApplicationRunner接口、实现ApplicationListener接口、使用@PostConstruct注解以及实现InitializingBean接口,每种方式都有其特点和适用场景
    2025-02-02
  • 解决java转义json出现\u0000 等乱码的问题

    解决java转义json出现\u0000 等乱码的问题

    这篇文章主要介绍了解决java转义json出现\u0000 等乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • idea导入module全流程

    idea导入module全流程

    这篇文章主要介绍了idea导入module全流程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Java实现Windows计算器界面

    Java实现Windows计算器界面

    这篇文章主要为大家详细介绍了Java实现Windows计算器界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06

最新评论