数据结构与算法(9)---Java语言实现:希尔排序
来源:互联网 发布:包就业java 培训班 编辑:程序博客网 时间:2024/05/24 06:09
希尔排序(Shell Sort)是改进型的插入排序的一种,也称缩小增量排序。它比普通插入排序的效率要更高。希尔排序是非稳定排序算法。
该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。
伪代码
input: an array a of length n with array elements numbered 0 to n − 1 inc ← round(n/2) while inc > 0 do: for i = inc .. n − 1 do: temp ← a[i] j ← i while j ≥ inc and a[j − inc] > temp do: a[j] ← a[j − inc] j ← j − inc a[j] ← temp inc ← round(inc / 2.2)
Java代码
package 算法;//希尔排序public class Demo5 {public static void shellSort(int arr[]){int len =arr.length;//数组长度int m,n,k;int temp;for(m=len/2;m>0;m=m/2){//间隔长度m依次从二分之一数组长到一for(n=m;n<len;n++){//每次从间隔长的第一位开始依次往前以间隔m长度向前比较temp=arr[n];//每次记下比较位置,类似于插入比较法,for(k=n-m;k>=0;k=k-m){if(temp<arr[k]){arr[k+m]=arr[k];}else{break;}}arr[k+m]=temp;}}}public static void main(String[] args){int a[]={7,4,8,0,3,5,2,1,6,10,27,12,23};shellSort(a);for(int i=0;i<a.length;i++){System.out.println(a[i]);}}}
输出结果
1234567810122327
阅读全文
0 0
- 数据结构与算法(9)---Java语言实现:希尔排序
- 希尔排序实现(ShellSort) Java数据结构与算法
- 数据结构与算法——希尔排序(Java实现)
- (数据结构与算法分析 八)------插入排序,希尔排序,归并排序的实现( Java语言描述)
- 数据结构与算法分析(Java语言描述)(4)—— 希尔排序
- Java数据结构与算法《八》希尔排序
- 【大话数据结构&算法】希尔排序(Java/C实现源码)
- 排序 (插入排序,快速排序,希尔排序)数据结构与算法分析-C语言描述
- 数据结构与算法(5)---Java语言实现:选择排序
- 数据结构与算法(6)---Java语言实现:冒泡排序
- 数据结构与算法(7)---Java语言实现:快速排序
- 数据结构与算法(8)---Java语言实现:插入排序
- 数据结构与算法(10)---Java语言实现:归并排序
- 数据结构与算法(11)---Java语言实现:堆排序
- 算法与数据结构(五)--希尔排序
- 数据结构与算法(八)希尔排序
- 【数据结构与算法】希尔排序
- 【数据结构与算法】希尔排序
- 训练日记 17.9.21
- 20170921表单标签
- [BZOJ]4953: [Wf2017]Posterize DP
- poj 3728 The merchant
- 使用zTree插件实现可拖拽的树
- 数据结构与算法(9)---Java语言实现:希尔排序
- 【分治计数|单调栈】51Nod 1215 数组的宽度
- 二分查找及STL
- UVa 12216 表达式树,map(不会)
- HD-27-水池数目(搜索)
- minnowboard 安装ubuntu16.04系统
- pgsql查询统计每天的数据
- 第一篇占个坑
- Java深度历险(二)——Java类的加载、链接和初始化