Java排序算法(六):直接插入排序

来源:互联网 发布:薄暮知秋什么意思 编辑:程序博客网 时间:2024/06/09 14:47
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个元素是有序的。

 

代码实现

[java] view plaincopyprint?
  1. package sort;  
  2.   
  3. public class InsertSortTest {  
  4.     public static int count = 0;  
  5.   
  6.     public static void main(String[] args) {  
  7.   
  8.         int[] data = new int[] { 536219487 };  
  9.         print(data);  
  10.         insertSort(data);  
  11.         print(data);  
  12.   
  13.     }  
  14.   
  15.     public static void insertSort(int[] data) {  
  16.         for (int i = 1; i < data.length; i++) {  
  17.             // 缓存i处的元素值  
  18.             int tmp = data[i];  
  19.             if (data[i] < data[i - 1]) {  
  20.                 int j = i - 1;  
  21.                 // 整体后移一格  
  22.                 while (j >= 0 && data[j] > tmp) {  
  23.                     data[j + 1] = data[j];  
  24.                     j--;  
  25.                 }  
  26.                 // 最后将tmp插入合适的位置  
  27.                 data[j + 1] = tmp;  
  28.                 print(data);  
  29.             }  
  30.         }  
  31.     }  
  32.   
  33.     public static void print(int[] data) {  
  34.         for (int i = 0; i < data.length; i++) {  
  35.             System.out.print(data[i] + "\t");  
  36.         }  
  37.         System.out.println();  
  38.     }  
  39.   
  40. }  


运行结果:

[java] view plaincopyprint?
  1. 5   3   6   2   1   9   4   8   7     
  2. 3   5   6   2   1   9   4   8   7     
  3. 2   3   5   6   1   9   4   8   7     
  4. 1   2   3   5   6   9   4   8   7     
  5. 1   2   3   4   5   6   9   8   7     
  6. 1   2   3   4   5   6   8   9   7     
  7. 1   2   3   4   5   6   7   8   9     
  8. 1   2   3   4   5   6   7   8   9    

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信超额20万怎么办 微信支付超额了怎么办 微信零钱超额了怎么办 微信的充值冲错了怎么办 有流量还扣话费怎么办 自动取款机充值到电子账户怎么办 淘宝qb充错了怎么办 q币冲错了人家不给怎么办 qq充值话费错号怎么办 qq充错号码了怎么办 qq交话费不到账怎么办 充错手机号码而且是空号怎么办 微信钱包充错话费怎么办 QQ充值话费充到空号了怎么办 给别人充错话费怎么办 用qq交错话费对方是空号怎么办 号码变成空号了怎么办 qq冲流量冲错了怎么办 流量冲错了套餐怎么办 微信流量充错号码怎么办 微信支付不进账怎么办 充话费充不进去怎么办 用支付宝充话费没到账怎么办 支付宝充话费未到账怎么办 话费充了不到账怎么办 转转买家不确认收货怎么办 充话费错了怎么办啊 淘宝充值流量没到账怎么办 微信手机充错了怎么办 支付宝充话费没到账怎么办 裤子摔了一个洞怎么办 顾客反应衣服质量不好怎么办 淘宝买的衣服味道很大怎么办 三国杀账号忘了怎么办 宽带连接被删了 怎么办 手机被偷了qq怎么办 手机丢了微信怎么办啊 手机店把手机修坏了怎么办 在手机店买到山寨机手机怎么办 有人在qq群上骂我怎么办 qq群一直有人骚扰怎么办