算法:两种希尔排序算法

 1 /**
 2  * 希尔排序
 3  * 不同步长的算法
 4  * @author mackxu
 5  *
 6  */
 7 class ShellSort {
 8     private int[] a = {5,2,4,3,1};
 9     private int nElems = 5;
10
11     public ShellSort() {
12
13     }
14
15     public void display() {
16         for(int elem : a) {
17             System.out.print(elem + " ");
18         }
19         System.out.println();
20     }
21     /**
22      * 外循环确定步长大小
23      * 中循环
24      * 内循环
25      */
26     public void shell_sort() {
27         int in, temp;
28         for (int gap = nElems/2; gap>0; gap/=2) {
29             for (int out=gap; out<nElems; out++) {
30                 temp = a[out];        //待排的元素
31                 in = out;
32                 //while循环中的两个判断条件
33                 while(in>gap-1 && a[in-gap]>temp){
34                     a[in] = a[in-gap];
35                     in -= gap;
36                 }
37                 a[in] = temp;
38             }
39         }
40
41     }
42
43     public void shell_sort2() {
44         int out, in;
45         int temp;
46
47         //获取最大步长
48         //可取值有4、13、40、121、364、1093....
49         int gap = 1;
50         while(gap<=nElems/3)
51             gap = gap*3 + 1;
52         while(gap>0) {
53             for(out=gap; out<nElems; out++) {
54                 temp = a[out];            //待排的元素
55                 in = out;
56                 while(in>gap-1 && a[in-gap]>=temp) {
57                     a[in] = a[in-gap];    //值大的后移, 腾出位置,等待填充
58                     in -= gap;
59                 }
60                 a[in] = temp;            //找到合适的位置,填充进去
61             }
62             gap = (gap-1)/3;            //改变步长
63         }
64
65     }
66 }

转载于:https://www.cnblogs.com/mackxu/archive/2012/10/26/2741188.html

算法:两种步长的希尔排序算法相关推荐

  1. 【算法知识】详解希尔排序算法

    前言 已发布: [算法知识]详解选择冒泡算法 [算法知识]详解选择排序算法 [算法知识]详解插入排序算法 当待插入元素是一个很小(当需求是从小到大排序时,从大到小排序时此处为很大)直接插入排序需要移动 ...

  2. 图解希尔排序——希尔排序算法(shell sort)

    希尔排序 shell sort 算法图解 算法实现(C语言) 算法分析 希尔排序又叫缩小增量排序,它是对直接插入排序算法的一种改进.希尔排序算法的基本思想是先将整个待排序的序列划分为若干个子序列,然后 ...

  3. java代码实现希尔排序_Java希尔排序算法代码实现

    Java希尔排序算法代码实现 时间:2017-08-30     来源:华清远见JAVA学院 什么是Java希尔排序算法呢? 希尔排序算法实际上是一种分组插入的排序算法,又被称为缩小增量排序.今天华清 ...

  4. 希尔排序是一种稳定的排序算法_全面解析十大排序算法之四:希尔排序

    点击上方蓝字关注我们吧 1. 十种排序算法的复杂度和稳定性 时间复杂度:一个算法消耗所需要的时间 空间复杂度:运行一个算法所需要的内存时间 稳定性:如一个排列数组:1.4.5.6.4.7. 此时有一对 ...

  5. 对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。

    题目要求: (1)对以下6种常用的内部排序算法进行比较:起泡排序.直接插入排序.简单选择排序.快速排序.希尔排序.堆排序. (2)待排序表的表长不小于100:其中的数据要用伪随机数产生程序产生:至少要 ...

  6. python算法与数据结构-希尔排序算法

    希尔排序(shell sort)是插入排序的一种,也称缩小增量排序,与普通的插入算法的区别就是gap步长. 希尔排序内层循环逻辑如下所示: 上面的可以分为4组,一个一个的按照插入算法来做,第一组有54 ...

  7. 选择、插入和希尔排序算法(转)

    本篇开始学习排序算法.排序与我们日常生活中息息相关,比如,我们要从电话簿中找到某个联系人首先会按照姓氏排序.买火车票会按照出发时间或者时长排序.买东西会按照销量或者好评度排序.查找文件会按照修改时间排 ...

  8. python实现希尔排序算法_python实现希尔排序算法

    希尔排序是插入排序的一种又称"缩小增量排序",是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法 ...

  9. 【数据结构----笔记5】插入排序算法之【希尔排序算法】

    /*__________________________________________________________________________________________________ ...

最新文章

  1. ef unitofwork 主从表更新
  2. 使用Postgrest快速创建数据库的OpenAPI接口
  3. [function.require]: Failed opening required 杰奇cms
  4. webpack使用优化(基本篇)
  5. 这个关系国计民生的“黑盒子” 我们造出来了
  6. OSSIM5 自定义安装
  7. Mac安装Redis
  8. 8 更新全局变量_2月26日守望先锋版本更新
  9. 数据结构(直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序、快速排序)
  10. 月关“历史网络小说第一人”:第四届橙瓜网络文学奖十佳历史大神
  11. 2022年总结与展望
  12. CAD填充块Hatch的深度解析
  13. 使用SpringBoot报错:Inferred type ‘S‘ for type parameter ‘S‘ is not within its bound。【解决办法】
  14. 北邮 复习 软件工程_2019北京邮电大学083500软件工程考研备考指南
  15. Android Studio 4.0 Image Asset 图标不能透明(记录)
  16. 蒙特卡洛(Monte Carlo)方法的介绍和应用
  17. 【基于Leaflet和Canvas绘图的前端大量栅格数据渲染】
  18. EventBus源码分析 1
  19. lua_pcall 函数详解
  20. 【小技巧】酒店Wifi不弹出登陆方案(Mac)

热门文章

  1. jQuery 1.3 for Asp.Net、 CSLA.Net 3.6 for Windows 及 MOSS/WSS 一步一步从入门到精通三个系列的目录...
  2. 新设备关联Gitlab
  3. MongoDB的基本用法
  4. Android Tcp操作
  5. Python 之路 Day5 - 常用模块学习
  6. Wrong FS: hdfs://xxx/xxx expected: file:///
  7. 面试算法:Maxbuild
  8. CodeBlocks: 生成的exe文件自定义一个图标
  9. RPM vs SRPM
  10. oracle使用dbms_metadata包取得所有对象DDL语句