Java排序算法(六):直接插入排序
来源:互联网 发布:在家当淘宝客服 编辑:程序博客网 时间:2024/06/08 13:22
Java排序算法(六):直接插入排序
直接插入排序的基本操作就是将待排序的数据元素按其关键字值的大小插入到前面的有序序列中。
直接插入的时间效率并不高,如果在最坏的情况下,所有元素的比较次数总和为(0+1+...+n-1)=O(n^2)。其他情况下也要考虑移动元素的次数,故时间复杂度为O(n^2)
直接插入空间效率很好,只需要1个缓存数据单元,也就是说空间复杂度为O(1).
直接插入排序是稳定的。
直接插入排序在数据已有一定顺序的情况下,效率较好。但如果数据无规则,则需要移动大量的数据,其效率就与冒泡排序法和选择排序法一样差了。
算法描述
对一个有n个元素的数据序列,排序需要进行n-1趟插入操作:
第1趟插入,将第2个元素插入前面的有序子序列--此时前面只有一个元素,当然是有序的。
第2趟插入,将第3个元素插入前面的有序子序列,前面2个元素是有序的。
第n-1趟插入,将第n个元素插入前面的有序子序列,前面n-1个元素是有序的。
代码实现
- package sort;
- public class InsertSortTest {
- public static int count = 0;
- public static void main(String[] args) {
- int[] data = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };
- print(data);
- insertSort(data);
- print(data);
- }
- public static void insertSort(int[] data) {
- for (int i = 1; i < data.length; i++) {
- // 缓存i处的元素值
- int tmp = data[i];
- if (data[i] < data[i - 1]) {
- int j = i - 1;
- // 整体后移一格
- while (j >= 0 && data[j] > tmp) {
- data[j + 1] = data[j];
- j--;
- }
- // 最后将tmp插入合适的位置
- data[j + 1] = tmp;
- print(data);
- }
- }
- }
- public static void print(int[] data) {
- for (int i = 0; i < data.length; i++) {
- System.out.print(data[i] + "\t");
- }
- System.out.println();
- }
- }
运行结果:
- 5 3 6 2 1 9 4 8 7
- 3 5 6 2 1 9 4 8 7
- 2 3 5 6 1 9 4 8 7
- 1 2 3 5 6 9 4 8 7
- 1 2 3 4 5 6 9 8 7
- 1 2 3 4 5 6 8 9 7
- 1 2 3 4 5 6 7 8 9
- 1 2 3 4 5 6 7 8 9
0 0
- Java排序算法(六):直接插入排序
- Java排序算法(六):直接插入排序
- Java排序算法(六):直接插入排序 .
- Java排序算法(六):直接插入排序
- 排序算法--直接插入排序(JAVA)
- java实现排序算法之插入排序(直接插入排序,折半插入排序,希尔排序)
- java算法之二直接插入排序(插入排序)
- 算法六之直接插入排序
- 算法六之直接插入排序
- JAVA算法(直接插入排序)
- Java算法 直接插入排序
- java 直接插入排序算法
- Java直接插入排序算法
- java算法【直接插入排序】
- Java直接插入排序算法
- 算法---插入排序(直接插入排序)
- 排序算法--插入排序(直接插入排序、折半插入、shell排序)的java实现
- java排序算法之直接插入排序
- Java排序算法(五):快速排序
- hdoj 1563 Find your present!&&2095 Find your present(2) 异或运算
- 使用java swing仿window7标准计算器界面
- PAT测试历程
- 30年来我只坚持三件事
- Java排序算法(六):直接插入排序
- C++中实现类似C中rewind函数功能
- PHP函数error_log的速度与可靠性
- Java排序算法(七):折半插入排序
- 解决linux VPN pptpd连接后客户端不能上网的问题
- C++程序2014年9月月末总结
- Java排序算法(八):希尔排序(Shell排序)
- eclipse could not write file .classpath
- 第十九章 19.5节练习 & 19.6节练习 & 19.8节练习