插入排序算法的java实现及时间复杂度分析
2015-05-31 22:37
337 查看
1 今天在看算法导论的时候被一个插入排序给卡住,于是小结一下。时间复杂度最坏为O(n^2),最好为O(n)。
2 还有一个问题:对于一个长度为n的数组,如果该数组每k个单元分为一组,假设为k1,k2….,其中k2中的元素都大于k1中的元素。那么称该数组为分段有序的。对于该数组,对每个分段进行插入排序后再合并成一个有序数组与对数组整体进行插入排序的时间复杂度是相同的,均为O(kn).
对于此可以这样理解,当对整个数组进行插入排序时,其实进行插入比较的只是本段之内的元素,当插入位置指定到前一段时,会因为不满足条件a[p]>=a[i]而结束该次循环。
2 还有一个问题:对于一个长度为n的数组,如果该数组每k个单元分为一组,假设为k1,k2….,其中k2中的元素都大于k1中的元素。那么称该数组为分段有序的。对于该数组,对每个分段进行插入排序后再合并成一个有序数组与对数组整体进行插入排序的时间复杂度是相同的,均为O(kn).
对于此可以这样理解,当对整个数组进行插入排序时,其实进行插入比较的只是本段之内的元素,当插入位置指定到前一段时,会因为不满足条件a[p]>=a[i]而结束该次循环。
package Array_; public class Insert_Sorted { /* * O(n^2); */ public static void Insert_Sort(int[] a){ if(a.length==1){ System.err.println("The length of Array is 1"); } int temp; int p; for(int i=1;i<a.length;i++){ temp=a[i]; //存储带插入元素; p=i-1; //记录当前比较下标; while(p>=0&&a[p]>=a[i]){ //将较大元素向后移,腾出一个空位 a[p+1]=a[p]; --p; } a[p]=temp; //元素插入; } } }
相关文章推荐
- java工具类——calendar
- Java中的数字基本运算和精度问题
- 使用Maven创建Web项目后,jsp引入静态文件提示报错。JSP 报错:javax.servlet.ServletException cannot be resolved to a type
- [Java5新特性]泛型
- [Java5新特性]泛型
- 各种排序算法的分析及java实现
- java之静态内部类
- 使用axis2,根据WSDL生成java客户端代码
- [Java5新特性]加强For循环
- [Java5新特性]加强For循环
- Ubuntu系统下安装Eclipse
- Ubuntu系统下安装Eclipse
- Ubuntu系统下安装Eclipse
- JAVA 抽象类
- [Java5新特性]可变参数
- [Java5新特性]可变参数
- Java设计模式——Facade(外观)模式
- Java构造和解析Json数据的两种方法详解一
- [Java5新特性]自动装箱/拆箱
- [Java5新特性]自动装箱/拆箱