插入排序算法之直接排序和希尔排序,java简单实现
来源:互联网 发布:c语言小爱心代码 编辑:程序博客网 时间:2024/06/08 02:11
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package Sorting;import java.util.Scanner;/** * * @author Biaoming */public class InsertSort { public static void main(String [] args){ InsertSort mysort = new InsertSort(); Scanner myscan = new Scanner(System.in); int listLength = myscan.nextInt();//获取输入数组长度 int [] unSortedlist = new int[listLength]; for(int i = 0 ;i<listLength;i++){ unSortedlist[i] = myscan.nextInt();//获取输入数组元素 } mysort.StraightInsert(unSortedlist);//直接插入排序 //mysort.ShellInsert(unSortedlist);//希尔排序 for(int i = 0 ;i<listLength;i++){ System.out.print(unSortedlist[i]+" ");//输出排序后数组元素 } } public void StraightInsert(int[] list) { int i, j, tmpInt; for (i = 1; i < list.length; i++) { tmpInt = list[i]; for (j = i; j > 0 && tmpInt < list[j-1]; j--) { list[j] = list[j-1]; } list[j] = tmpInt; } } private void ShellIterator(int[] list, int increment) { int i,j,tmpInt; for (i = increment; i < list.length; i++) { tmpInt = list[i]; for (j = i; j>0 && tmpInt < list[j - increment]; j -= increment) { list[j] = list[j - increment]; } list[j] = tmpInt; } } public void ShellInsert(int[] list) { int increment = list.length; while (increment > 0) { increment = increment / 2; ShellIterator(list, increment); } }}Shell排序的时间性能优于直接插入排序
希尔排序的时间性能优于直接插入排序的原因:
①当文件初态基本有序时直接插入排序所需的比较和移动次数均较少。
②当n值较小时,n和n2的差别也较小,即直接插入排序的最好时间复杂度O(n)和最坏时间复杂度0(n2)差别不大。
③在希尔排序开始时增量较大,分组较多,每组的记录数目少,故各组内直接插入较快,后来增量di逐渐缩小,分组数逐渐减少,而各组的记录数目逐渐增多,但由于已经按di-1作为距离排过序,使文件较接近于有序状态,所以新的一趟排序过程也较快。
因此,希尔排序在效率上较直接插人排序有较大的改进。
稳定性而言,希尔排序是不稳定的,而直接插入排序是稳定的。
排序算法稳定性:在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的;若具有相同关键字的记录之间的相对次序发生变化,则称这种排序方法是不稳定的。
- 插入排序算法之直接排序和希尔排序,java简单实现
- java实现排序算法之插入排序(直接插入排序,折半插入排序,希尔排序)
- 插入排序算法之直接插入排序和希尔排序
- 排序算法之直接插入排序和希尔排序
- 八大排序算法之直接插入排序和希尔排序
- java直接插入排序和希尔排序
- 插入排序之直接希尔排序Java实现
- 算法 排序算法之插入排序--直接插入排序和希尔排序
- 排序算法--插入排序(直接插入排序、希尔排序)Java实现
- 算法-排序-插入排序(直接插入和希尔排序)
- 排序算法(一)--插入排序之直接插入排序和希尔排序
- 排序算法之直接插入排序、二分插入排序和希尔排序
- 排序算法之直接插入排序与希尔排序
- Java基础篇之----排序(快速排序、冒泡排序、堆排序、简单选择排序、 希尔排序、直接插入排序)
- 排序算法java 一 --快速排序、直接插入、希尔排序
- 排序算法(一)------直接插入排序和希尔排序
- 排序算法---直接插入排序和希尔排序
- Java排序算法总结之(一)——插入排序(直接插入排序、折半插入排序、希尔排序)
- Android Dialog详解
- [转]Twemproxy——针对MemCached与Redis的代理
- Nodejs在win7环境中安装及测试
- WE大会马化腾要告诉我们什么?
- 生成随机数 打印系统时间 方法
- 插入排序算法之直接排序和希尔排序,java简单实现
- hdu 2157 How many ways_ 矩阵快速幂
- 直接从 Google Play 下载 Android 应用最简单的方法
- VC++6.0常见编译错误中英文对照表
- Ubuntu中的tomcat能启动却不能用localhost:8080访问
- FileUpload控件上传文件时服务器不能与本地连接
- 【转】oracle lag与lead分析函数简介
- tar压缩解压命令
- Java中类不能多重继承,接口可以多重继承