希尔排序算法图解分析
文章目录
- 一、希尔排序介绍
- 二、图解
- 三、代码实现
一、希尔排序介绍
基本思想:希尔排序源于插入排序,是对插入排序的改进,将长度为n的数组分成k(k = n/2)组,每组内进行排序,排序完成后将数组分为k (k = (n/2)/2)组,不断重复这个过程直到k变为1.排序完成。
优点:前一次的排序会使后一次排序的数列更有序,使后一次插入排序进行的操作更少。
二、图解
以 arr = {4,6,8,1,9,3,5,2}为例。
arr.length 为8,先分为4组。以颜色区分组。
以插入排序形式进行排序。
分为4/2 = 2 组。
以插入排序形式进行排序。
分为2/2=1组。以插入排序形式进行排序。
结束。
三、代码实现
详细插入排序的分析与代码见链接:link
希尔排序代码:
public class ShellSort {public static void main(String[] args) {int arr[] = {4,6,8,1,9,3,5,2};shellSort(arr);System.out.println(Arrays.toString(arr));}//希尔排序public static void shellSort(int[] arr){int temp = 0;for(int gap = arr.length/2; gap > 0; gap /= 2){//进行分组//对各分组进行插入排序for (int i = gap; i < arr.length; i++) {int j = i;temp = arr[j];if(arr[j] < arr[j - gap]){while(j - gap >= 0 && temp < arr[j - gap]){arr[j] = arr[j-gap];j -= gap;}arr[j] = temp;}}}}
}
希尔排序算法图解分析相关推荐
- 算法:两种步长的希尔排序算法
算法:两种希尔排序算法 1 /** 2 * 希尔排序 3 * 不同步长的算法 4 * @author mackxu 5 * 6 */ 7 class ShellSort { 8 private int ...
- JavaScript实现ShellSort希尔排序算法(附完整源码)
JavaScript实现ShellSort希尔排序算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 ShellSort.js完整源代码 Comparator.js完整 ...
- 排序算法:希尔排序算法实现及分析
希尔排序算法介绍 希尔排序是D.LShell 与1957年提出来的一种排序算法,在这之前排序算法的时间复杂度都是O(n^2),希尔排序算法是突破这个时间复杂度的第一批算法之一.我们知道直接插入排序算法 ...
- 【数据结构----笔记5】插入排序算法之【希尔排序算法】
/*__________________________________________________________________________________________________ ...
- Go 实现希尔排序算法及图解
耐心和持久胜过激烈和狂热. 哈喽大家好,我是陈明勇,今天分享的内容是使用 Go 实现希尔排序算法.如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有 ...
- 希尔排序 最坏时间_希尔排序算法
希尔排序(Shell's Sort)是插入排序的一种,又称"缩小增量排序",是直接插入排序算法经过改进之后的一种更高效的版本.希尔排序为了加快速度简单地改进了插入排序,交换不相邻的 ...
- python实现希尔排序_希尔排序算法的python实现
下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. def shellSort(items): inc = len(items) / 2 wh ...
- SWUST OJ#1099(希尔排序算法实现)
目录 题目 代码 小结 题目 代码 #include <iostream> #include <algorithm> using namespace std; int main ...
- 希尔排序算法(思路分析) [数据结构][Java]
希尔排序算法(思路分析) 希尔排序也称之为: 缩小增量排序 希尔排序提出的背景: 因为简单插入排序中存在一些问题( 这里我们以升序排序为例 ): 当我们要待插入的数值比较小时后移的次数明显增多,对效率 ...
最新文章
- MongoDB数据库(一:基本操作)
- 2014年国内最热门的.NET开源平台
- websocket 本地可以服务器断开 springboot linux_SpringBoot+WebSocket实现简单的数据推送...
- mini2440-Openwrt启动信息
- Python官方文档学习心得(第三篇)
- Hadoop(六)搭建分布式HBase集群
- 基于JAVA+SpringBoot+Mybatis+MYSQL的今日头条新闻网站
- 一步步实现SDDC-NSX MGR安装和主机准备
- 百度大数据 CMO的新左脑-百度-喻友平
- cat >> ipconf << EOF > EOF是什么意思
- 四种常见的XML解析方式
- 108个Python精选库,看完收获丰富
- TensorFlow2.0教程-使用keras训练模型
- 计算机叶老师,叶茫 - 教师简历 CV- 武汉大学计算机学院
- ORA-00392: log 3 of thread 1 is being cleared, operation not allowed
- 服务器要不要设置虚拟内存,服务器要不要设置虚拟内存
- 如何有效地进行代码 Review
- Excel对不等的合并单元格进行多列数据求和操作
- BeanUtils.copyProperties无法复制集合问题解决
- picpick截图工具自动保存自动命名设置的方法