为什么80%的码农都做不了架构师?>>>   

/*
 * 希尔排序:先取一个小于n的整数d1作为第一个增量,
 * 把文件的全部记录分成(n除以d1)个组。所有距离为d1的倍数的记录放在同一个组中。
 * 先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,
 * 直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
 */

/*
 * 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序
 * 排序过程:先取一个正整数d1<n,把所有序号相隔d1的数组元素放一组,
 * 组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di=1, 即所有记录放进一个组中排序为止
 * 初始:d=5,49 38 65 97 76 13 27 49 55 04
 *             49 13 |--------------------|
 *             38 27     |---------------------|
 *             65 49          |--------------------|
 *             97 55               |--------------------|
 *             76 04                    |---------------------|
 * 一趟结果 13 27 49 55 04 49 38 65 97 76
 *         d=3,13 27 49  55 04 49 38 65 97 76
 * 13 55 38 76 |------------|------------|------------|
 * 27 04 65           |------------|-----------|
 * 49 49 97               |------------|------------|
 * 二趟结果  13 04 49* 38 27 49 55 65 97 76
 * d=1, 13 04 49 38 27 49 55 65 97 76
 * 三趟结果
 * 04 13 27 38 49 49 55 65 76 97
 */

public class ShellSort {public static void sort(int[] data) {for (int i = data.length / 2; i > 2; i /= 2) {for (int j = 0; j < i; j++) {insertSort(data, j, i);}}insertSort(data, 0, 1);}/*** @param data* @param j* @param i*/private static void insertSort(int[] data, int start, int inc) {for (int i = start + inc; i < data.length; i += inc) {for (int j = i; (j >= inc) && (data[j] < data[j - inc]); j -= inc) {int temp = data[j];data[j] = data[j - inc];data[j - inc] = temp;}}}
}

转载于:https://my.oschina.net/gAKey/blog/1531578

ShellSort -- 希尔排序相关推荐

  1. JavaScript实现ShellSort希尔排序算法(附完整源码)

    JavaScript实现ShellSort希尔排序算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 ShellSort.js完整源代码 Comparator.js完整 ...

  2. ShellSort 希尔排序

    希尔排序算法: 思路: 例如例子中的,首先步长increment为10/3=3,再之后为3/3=1,在每次增量循环时,外循环i=increment开始,直到最后一个数,内循环比较与前面(增量间隔)的数 ...

  3. 直接插入排序,折半插入排序,希尔排序,简单选择排序,冒泡排序,快速排序模板以及比较次数与移动次数的分析,折半搜索算法模板

    #include<stdio.h> #include<time.h> #include <stdlib.h>const int maxx=1e2+1; int a[ ...

  4. 八种基本排序方式(插入排序,希尔排序,选择排序,冒泡排序,快速排序,堆排序,归并排序,基数排序)代码模板以及时间复杂度

    #include<stdio.h> #include<time.h> #include <stdlib.h>const int maxx=20010; int a[ ...

  5. 排序算法——希尔排序的图解、代码实现以及时间复杂度分析

    希尔排序(Shellsort) 希尔排序是冲破二次时间屏障的第一批算法之一. 希尔排序通过比较相距一定间隔的元素来工作:各躺比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止.由 ...

  6. Java数据结构——直接插入排序+希尔排序+冒泡排序

    文章目录 一.插入排序 (一).什么是插入排序 (二).图例 (三).Java代码 二.希尔排序 (一).什么是希尔排序 (二).图例 (三).Java代码 三.冒泡排序 (一).什么是冒泡排序 (二 ...

  7. 希尔排序(shellsort)算法实现

    希尔排序(shellsort)又叫增量递减(diminishing increment)排序,是由D.L. Shell发明的,这个算法是通过一个逐渐减小的增量使一个数组逐渐趋近于有序从而达到排序的目的 ...

  8. 希尔排序(ShellSort) c源码

    希尔排序(Shell's Sort)其实是一种优化的插入排序,插入排序(insertSort)平均时间复杂度为O(n^2),仅仅比较时间复杂度的话,优于插入排序的还有很多其它排序方法,比如说堆排序或者 ...

  9. 数据算法之希尔排序(shellSort)的Java实现

    本文的代码来自于<数据结构与算法(JAVA语言版)>,是笔者在网上找到的资料,非正式出刊版物.笔者对代码一些比较难以理解的部分添加了注释和图解,欢迎大家来讨论. 希尔排序的基本思想是先把数 ...

最新文章

  1. 为什么要打jar_生活在西北的兰州人过春节为什么要打太平鼓?
  2. python解析json_python解析json文件
  3. python人人语音爬虫(登陆尚未完成,需要使用先登录在查cookie中的t)
  4. cvs有机添加剂检测_美国ECI CVS 电镀添加剂分析仪QL-10EX
  5. 思杰VDI十终极结构图及总结
  6. 浅层分析-shallow parsing
  7. mysql join 组合索引,图文详解MySQL中两表关联的连接表如何创建索引
  8. 代码整洁之道--程序员的职业素养
  9. 台架控制器-AVL_ISAC学习
  10. 程序员如何成为架构师
  11. PS小白怎么学会更换材质效果
  12. USACO 1.1.3 - Friday the Thirteenth(模拟)
  13. windows 10远程连接ubuntu 18.04 Gnome桌面:NoMachine工具使用详解
  14. 数据结构习题--线性表
  15. Python 实战案例--计算圆、矩形的周长和面积
  16. keypair java_Java KeyPairGenerator generateKeyPair()用法及代码示例
  17. wpf net6.0 桌面应用程序打包
  18. 取消忘记密码的excel文件的保护
  19. 洛谷 U41571 Agent2
  20. 论文成功写作技巧之行之有效的写作从“结果”开始(下)

热门文章

  1. poi的excel解析工具类
  2. Hadoop,MapReduce
  3. 构造函数为什么不能是虚函数
  4. Android学习系列(11)--App列表之拖拽ListView(下)
  5. 【Windows Phone设计与用户体验】关于移动产品的Loading用户体验的思考
  6. Oracle脚本(二)
  7. 人家android博客地址
  8. 爬虫之Selenium库
  9. BEGINNING SHAREPOINT#174; 2013 DEVELOPMENT 第1章节--SharePoint 2013 介绍 SharePoint 2013 平台...
  10. 《软件工程》第四次作业--目标软件(必应词典)