java 数据结构-->希尔排序
2012-08-22 00:00
369 查看
希尔排序(Shell Sort)又称缩小增量排序算法的基本思路是:先取一个小于n的整数(称为增量)然后把排序中的n个记录分为若干个子表从下标0开始间隔为i的记录组成一个子表在各个子表内进行直接插入排序随着增量的减小达到排序目的。
算法性能分析:
(1) 空间复杂度 希尔排序用到了直接插入排序所以空间复杂度为O(1)
(2) 时间复杂度 O(n ^2
(3)算法的稳定性 不稳定的排序算法
听所还有一个更加犀利的算法比较NB现在和大家一起分享 这个是别人写的给大家拿出来好好看看:
算法性能分析:
(1) 空间复杂度 希尔排序用到了直接插入排序所以空间复杂度为O(1)
(2) 时间复杂度 O(n ^2
(3)算法的稳定性 不稳定的排序算法
/* * Kiss_My_Love * 2012/8/22 * 希尔排序 **/ public static void shellArray(Object[] a){ for(int i=a.length/2;i>0;i/=2){ //对排序数列设置增量,并确定外围循环次数 for(int j=0;j<i;j++){ insertSort(a,j,i);//单位数组进行排序 } } } private static void insertSort(Object[] A, int start, int d) { int t; for (int i = start + d; i < A.length; i += d) { for (int j = i; (j >= d) && ((Integer)A[j] <(Integer) A[j - d]); j -= d) { t = (Integer) A[j]; A[j] = A[j - d]; A[j - d] = t; } }
听所还有一个更加犀利的算法比较NB现在和大家一起分享 这个是别人写的给大家拿出来好好看看:
/* * Kiss_My_Love * 2012/8/23 * 希尔排序 **/ public static Object[] shellSort(Object[] arr){ int i,j,n=1,temp,len = arr.length; while(n<=len/3) n = n*3+1; while(n > 0){ for (i = n; i < len; i++) { temp = (Integer) arr[i]; j = i; while(j >= n && (Integer)arr[j - n] >= temp){ arr[j] = arr[j - n]; j-=n; } arr[j] = temp; } n = (n - 1)/3; } return arr; }
相关文章推荐
- 数据结构--排序系列(插入排序,希尔排序,堆排序)Java代码实现
- 数据结构Java实现——③串--->串的模式匹配:Brute-Force算法和 KMP算法
- 用java源代码学数据结构<五>: Stack 详解
- 用java源代码学数据结构<七>: BST
- Java 数据结构 --> Enumeration接口
- Java 数据结构 --> Vector 类
- 【数据结构】Java实现各类经典排序算法——插入排序、希尔排序
- 用java源代码学数据结构<七>: BST
- JAVA中的数据结构——集合类(线性表:Vector、Stack、LinkedList、set接口;键值对:Hashtable、Map接口<HashMap类、TreeMap类>)
- 【数据结构】-直接插入排序、希尔排序Java实现
- java数据结构排序之希尔排序实现
- Java 数据结构 --> Stack 类
- 希尔排序-Java<二>
- 数据结构Java实现——④数组—>稀疏矩阵三元组顺序存储-->矩阵的倒置
- 数据结构Java实现——④数组——>稀疏矩阵十字链表存储法
- 数据结构Java实现——②队列-->队列的“奇葩”二 优先级队列
- <转载>Java(17):Java常用数据结构及其特征解读
- 用java源代码学数据结构<二>: Vector 详解
- Java 数据结构 --> Hashtable 接口
- JAVA答案整理---->微软等公司数据结构、算法面试笔试题(v_JULY_v博主发布)