
二分查找与插入排序的结合使用
发布日期:2021-05-07 21:49:28
浏览次数:9
分类:精选文章
本文共 1226 字,大约阅读时间需要 4 分钟。
插入排序中的插入位置查找操作可以通过二分查找优化,提升性能。我们可以通过以下步骤实现这一点。
思路分析
插入排序的核心在于为新元素找到合适的位置。传统方法是从后向前扫描找到插入点,而二分查找则利用有序数组的特性,快速缩小范围。
基本原理:由于每次插入的子数组都是有序的,二分查找能高效找到插入位置。我们从数组的前端开始,逐步处理每个元素。
查找过程:设置low和high初始值,通过循环确定插入位置。若中间元素大于当前元素,调整high;反之调整low,直到找到正确位置。
插入操作:找到位置后,从后向前移动元素,腾出位置,插入当前元素。
优化灵活性:通过调换条件,可以实现插入排序的不同策略,如降序排序。
#includeusing namespace std;void sort(int arr[], int n) { int low, high, place, temp; for (int i = 1; i < n; ++i) { low = 0, high = i - 1; temp = arr[i]; while (low <= high) { int mid = (low + high) / 2; if (temp <= arr[mid]) { high = mid - 1; } else { low = mid + 1; } } place = low; for (int j = i - 1; j >= place; --j) { arr[j + 1] = arr[j]; } arr[place] = temp; }}int main() { int arr[9] = {3, 5, 1, 2, 7, 9, 12, 14, 8}; sort(arr, 9); for (int i = 0; i < 9; ++i) { cout << arr[i] << " "; } cout << endl; return 0;}
代码解释
- 排序函数:
sort
函数接受数组和其长度,实现插入排序。 - 外层循环:从第二个元素开始处理,逐步构建有序数组。
- 二分查找:通过low和high确定插入位置,利用中间元素进行范围缩小。
- 插入操作:从当前位置开始,向后移动元素,插入新元素。
- 主函数:初始化数组,调用排序函数,输出结果。
这种方法保持了插入排序的时间复杂度O(n²),但通过二分查找显著提升查找效率,达到O(log n)。整体复杂度为O(n²),适合大部分实际应用。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月27日 03时43分04秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
一篇文章带你搞定 Oracle 的体系结构
2019-03-04
Oracle 单行函数
2019-03-04
(LeetCode)Java 求解搜索旋转排序数组
2019-03-04
(模拟数组)Java 求解螺旋矩阵 II
2019-03-04
Python学习:字符串
2019-03-04
计算几何(旁切圆) - Ex-circles - UVA 11731
2019-03-04
DP - Tickets - HDU - 1260
2019-03-04
JVM篇-结合源码分析垃圾收集器的类型
2019-03-04
Warning: The core is locked up的解决办法
2019-03-04
Spring 与使用STOMP消息
2019-03-04
Java Swing JList:列表框组件
2019-03-04
AngularJS $q
2019-03-04
jQuery中的动画
2019-03-04
Linux host命令
2019-03-04
MongoDB 查询分析
2019-03-04
编写Makefile.am
2019-03-04
狂神说MySQL01:初识MySQL
2019-03-04
5.3.2 等待一段时间:编写延时循环
2019-03-04