【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 3320|回复: 0

[算法/加密解密] 插入排序之二 折半插入排序

[复制链接]
发表于 2013-8-8 13:56:26 | 显示全部楼层 |阅读模式
由于插入排序的基本操作是在一个有序表中进行查找和插入,这个“查找”操作可利用“折半查找”来实现,由此进行的插入排序称之为折半插入排序(Binary Insertion Sort)。时间复杂度为O(n^2)理解:依次将每个待排序的记录插入到一个有序序列的合适位置。插入的位置是采用折半查找法确定的。
  1. void CInsertionSort::BinaryInsertion(void)
  2. {
  3.     //元素0是哨兵。
  4.     const int count = 9;
  5.     int L[count] = {0, 49, 38, 65, 97, 76, 13, 27, 49};
  6.     //对顺序表L作折半插入排序。
  7.     for (int i = 2; i < count; i ++)
  8.     {
  9.         L[0] = L[i];
  10.         int low = 1;
  11.         int high = i - 1;
  12.         while(low <= high)
  13.         {
  14.             int m = (low + high) / 2;
  15.             if (L[0] < L[m])
  16.                 high = m - 1;
  17.             else
  18.                 low = m + 1;
  19.         }
  20.         for (int j = i - 1; j >= high + 1; --j)
  21.             L[j + 1] = L[j];
  22.         L[high + 1] = L[0];
  23.     }
  24.     //打印排序结果。
  25.     for (int i = 0; i < count; ++ i)
  26.     {
  27.         cout << L[i] << "\t";
  28.     }
  29.     cout << endl;
  30. }
复制代码
对于一个有序序列,采用折半查找的方式,可以提高查找的速度。那么折半插入法就是用这种方式来实现查找应插入到有序序列的位置。然后移动相应的记录,再插入到正确的位置。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-6 03:54

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表