高级排序---希尔排序
2019-02-17 01:50:51来源:博客园 阅读 ()
希尔排序对于多达几千个数据的中大小规模的数组排序表现良好。希尔排序不像快速排序和其他时间复杂度为O(N*logN)的排序那么快,因此对非常大的文件排序,它不是最优选择。但是希尔排序比选择排序和插入排序这种时间复杂度为O(N*N)排序算法快的多,并且它非常容易实现:希尔排序算法代码ji即短又简单。
希尔排序是基于插入排序的,但是插入排序的缺点是复制次数太多,当一个很小的数在数组最右边时,效率低
n-增量排序
希尔排序通过加大插入排序元素中的间隔,并在这些有间隔的元素中进行插入排序,从而是数据项能大跨度的移动。当这些数据项排过一趟序后,希尔排序算法减小数据项的间隔再进行排序,依次进行下去。进行这些排序的数据间隔被称为增量。当数组全部增量排序完后再减小间隔继续排序
import org.junit.Test; import java.util.Arrays; import java.util.Random; public class ArraySh { @Test public void shTest(){ int[] arr = new int[30]; Random random = new Random(); for(int i = 0;i < arr.length;i++){ arr[i] = random.nextInt(1000); } System.out.println("未排序前数组:" + Arrays.toString(arr)); arr = shellSort(arr); System.out.println("排序后数组:" + Arrays.toString(arr)); } public int[] shellSort(int[] arr){ int inner,outer,temp; int h = 1; while (h <= arr.length/3){ h = h*3 +1; } while (h > 0){ for(outer = h;outer < arr.length; outer++){ temp = arr[outer]; inner = outer; while (inner > h -1 && arr[inner - h] >= temp){ arr[inner] = arr[inner - h]; inner -= h; } arr[inner] = temp; } h = (h-1) /3; } return arr; } }
原文链接:https://www.cnblogs.com/jin-Xi/p/10375655.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 设计模式---类之间的关系知多少 2020-06-07
- Java高级实战Maven+JSP+SSM+Mysql实现的音乐网站,70%人不会 2020-06-04
- 基础排序算法(附加java实现) 2020-06-02
- java方法句柄-----1.方法句柄类型、调用 2020-05-28
- Java--Java的设计模式----单例模式 2020-05-26
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash