希尔排序与堆排序(Java版)
来源:互联网 发布:网络解锁nck 编辑:程序博客网 时间:2024/05/01 16:48
希尔排序
package ShellSort;import Utils.SortUtils;public class Demo { public static void shellSort(int[] a){ int temp,j; int increment = a.length; do{ increment = increment/3+1;//如果是直接插入排序,这里的increment都为1。 //System.out.println(increment); for (int i = increment; i < a.length; i++) { if(a[i]<a[i-increment]){ temp = a[i];//暂存于temp中 for (j=i-increment; j>=0 && a[j]>temp; j-=increment) { a[j+increment] = a[j];//记录后移,查找插入位置 } a[j+increment] = temp;//插入 } } }while(increment>1); } public static void main(String[] args) { int[] a = {2,3,5,4,1,6,9,8,7}; shellSort(a); SortUtils.printString(a); }}
复杂度分析
堆排序
package HeapSort;import Utils.SortUtils;public class Demo02 { //堆排序 public static void heapSort(int[] a){ int len = a.length; //将待排序数据构建为大顶堆 for(int i=(a.length-1-1)/2;i>=0;i--){ heapAdjust(a,i,len); } for (int i = a.length-1; i > 0; i--){ //将队顶值与当前未经排序子序列的最后一个值交换 SortUtils.swap(a,0,i); heapAdjust(a,0,--len);//重新调整大顶堆 } } //将待排序序列构建成一个大顶堆 public static void heapAdjust(int[] a,int s,int len){ int temp; temp = a[s]; for (int i = 2*s+1; i < len; i++) { if(i<len-1 && a[i]<a[i+1]){ i++;//i为关键字中较大的记录的下标 } if(temp>=a[i]){//如果父节点本身就大于最大的子节点,终止循环 break; } a[s] = a[i]; s = i; } a[s] = temp; } public static void main(String[] args) { int[] a = {2,3,5,4,1,6,9,8,7}; heapSort(a); SortUtils.printString(a); }}
复杂度分析
0 0
- 希尔排序与堆排序(Java版)
- 希尔排序与堆排序
- 希尔排序与堆排序
- 简单排序Java实现(三):希尔排序,堆排序
- Java高级排序(希尔排序,快速排序,堆排序,归并排序,桶排序)
- 排序(希尔排序,堆排序,归并排序,快速排序)
- 希尔排序(JAVA版)
- Java基础篇之----排序(快速排序、冒泡排序、堆排序、简单选择排序、 希尔排序、直接插入排序)
- 数据结构--排序系列(插入排序,希尔排序,堆排序)Java代码实现
- 希尔排序 堆排序 与 二叉树排序
- 希尔排序java版
- 希尔排序--Java版
- java五种内部排序(直接插入排序、希尔排序、快速排序、堆排序、归并排序)
- (Java)希尔排序
- 希尔排序(java)
- 排序总结JS版(冒泡排序、简单选择排序、快速插入排序、希尔排序、堆排序、快速排序)
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- 堆排序,希尔排序解析
- 学习 java netty (一) -- java nio
- 基于ArcGIS for Server的服务部署分析
- 广义回归神经网络(GRNN)的数据预测
- SyntaxError: Non-ASCII character Python、Unicode和中文
- 【计蒜客系列】挑战难题22:排序后的数组删除重复数字
- 希尔排序与堆排序(Java版)
- 【数据结构】3、模拟银行窗口排队叫号系统——C++
- 文本文件BASE-64编码解码
- hdu 3068 manacher算法
- [Python]psutil模块:用于获得处理器、系统和进程相关信息
- 安卓相对布局
- 解决VS2012【加载......符号缓慢】的问题
- PackageInstallerActivity 分析
- 大数的加法与乘法