A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jackhai9 中级黑马   /  2014-8-11 22:17  /  1404 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 jackhai9 于 2014-8-12 12:24 编辑

既然一般情况下,插入排序比冒泡排序快一倍,比选择排序还要快一点。那生活中有什么例子能帮助我们更好地理解插入排序吗?

5 个回复

倒序浏览
貌似最经典的例子就是整理手中的扑克牌,使其按牌面数字从小到大或从大到小排列。假设要求从左往右,最小的排在最左边,最大的排在最右边。那么整理过程是:将左边第二张牌跟左边第一张牌比较大小并按顺序排列两张牌,然后将左边第三张牌依次和左边第二张牌、左边第一张牌比较大小,决定左边第三张牌应该放的位置。以此类推。这样,当处理完左边k张牌时,就可以保证这k张牌是有序的。那么当处理完全部牌时,整手牌也就是有序的了
回复 使用道具 举报
fantacyleo 发表于 2014-8-11 22:36
貌似最经典的例子就是整理手中的扑克牌,使其按牌面数字从小到大或从大到小排列。假设要求从左往右,最小的 ...

这么说,“打够级”摸牌也是啊,原来我小时候就接触了插入排序这么高深的东东啊,哈哈
回复 使用道具 举报
fantacyleo 发表于 2014-8-11 22:36
貌似最经典的例子就是整理手中的扑克牌,使其按牌面数字从小到大或从大到小排列。假设要求从左往右,最小的 ...

果然理解的够透彻,学习了
回复 使用道具 举报
插入排序不懂,但冒泡排序和选择排序的效率是一样的!
回复 使用道具 举报

  1. 附上小小代码思想
  2. public static void main(String[] args) {       
  3.         int[] arr = {1,5,3,8,2,7};       
  4.         arr = insert(arr);
  5.         for(int i=0;i<arr.length;i++){
  6.                   System.out.print(arr[i]+" ");
  7.         }
  8. }
  9.        
  10.         //用插入排序完成数组元素从小到大排序
  11. public static int[] insert(int[] arr){
  12.         for(int i=1;i<arr.length;i++){       
  13.                 for(int j=i;j>0;j--){
  14.                         if(arr[j]<arr[j-1]){       
  15.                                 int temp = arr[j];
  16.                                 arr[j] = arr[j-1];
  17.                                 arr[j-1] = temp;
  18.                         }
  19.                         else
  20.                 }
  21.         }
  22.         return arr;
  23. }
复制代码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马