【模板小程序】二分法插入排序

本文介绍了一种使用二分查找优化传统插入排序算法的方法,并通过C++代码实现了该算法。通过对数组进行二分查找确定待插入元素的位置,提高了排序效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java版源程序来自:http://www.cnblogs.com/PerkinsZhu/p/5674572.html,在此感谢。

 1 #include <iostream>
 2 #include <vector>
 3 #include <string>
 4 using namespace std;
 5 
 6 void printArray(string str,vector<int>& array){
 7     cout<<str;
 8     for(int val:array){
 9         cout<<val<<" ";
10     }
11     cout<<endl;
12 }
13 
14 void binaryInsertionSort(vector<int>& array) {
15     printArray("原数组:", array);
16     int time=0;
17     for (int i = 1; i < (int)array.size(); ++i) {
18         int temp = array[i];
19         int right = i - 1;
20         int left = 0;
21         int mid;
22         // 定位
23         while (left <= right) {
24             //mid = (left + right) / 2;
25             mid = left+(right-left)/2;
26             if (array[mid] > temp) {
27                 right = mid - 1;
28             } else if (array[mid] < temp) {
29                 left = mid + 1;
30             }
31         }
32         // 移动数组
33         for (int j = i; j > left; j--) {
34             array[j] = array[j - 1];
35         }
36         // 在找到的位置插入
37         array[left] = temp;
38         printArray("" + to_string(++time) + "次循环排序结果: ", array);
39     }
40 }
41 
42 int main()
43 {
44     vector<int> v={21,8,2,18,0,9,27,12,5,24};
45     binaryInsertionSort(v);
46     return 0;
47 }

运行结果:

原数组:21 8 2 18 0 9 27 12 5 24
第1次循环排序结果: 8 21 2 18 0 9 27 12 5 24
第2次循环排序结果: 2 8 21 18 0 9 27 12 5 24
第3次循环排序结果: 2 8 18 21 0 9 27 12 5 24
第4次循环排序结果: 0 2 8 18 21 9 27 12 5 24
第5次循环排序结果: 0 2 8 9 18 21 27 12 5 24
第6次循环排序结果: 0 2 8 9 18 21 27 12 5 24
第7次循环排序结果: 0 2 8 9 12 18 21 27 5 24
第8次循环排序结果: 0 2 5 8 9 12 18 21 27 24
第9次循环排序结果: 0 2 5 8 9 12 18 21 24 27

 

二分查找就是把插入位置的寻找过程由原来的顺序查找改成了二分查找,效率很高。

转载于:https://www.cnblogs.com/xiaoxi666/p/7469588.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值