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

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

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

时间: 2024-10-13 02:25:20

【模板小程序】二分法插入排序的相关文章

模板小程序】求小于等于N范围内的质数

xiaoxi666 联系邮箱: [email protected] 博客园 首页 新随笔 联系 订阅 管理 [模板小程序]求小于等于N范围内的质数 1 //筛法求N以内的素数(普通法+优化),N>=2 2 #include <iostream> 3 #include <cmath> 4 #include <vector> 5 using namespace std; 6 ///寻找N以内的质数 7 vector<int> find_Prime(int

【模板小程序】链表排序(qsort/insert_sort/merge_sort)

前言 本文章整理了链表排序的三种方法,分别是快速排序.插入排序.归并排序.为适应不同用途,先给出常用的int版本,再在此基础上抽象出类模板. 目录 一.针对整数的版本(常用) 文中链表定义 链表相关操作 三种排序方法 完整测试程序 二.模板版本(适用性广泛) 文中链表定义 链表相关操作 三种排序方法 完整测试程序 总结 参考文章 一.针对整数的版本(常用) 文中链表定义: 1 //definition for singly-linked list. 2 struct ListNode 3 { 4

【模板小程序】求小于等于N范围内的质数

1 //筛法求N以内的素数(普通法+优化),N>=2 2 #include <iostream> 3 #include <cmath> 4 #include <vector> 5 using namespace std; 6 ///寻找N以内的质数 7 vector<int> find_Prime(int N) 8 { 9 vector<int> prime_tmp(N,1); 10 for(int i=0; 2*i+3<=sqrt(

【模板小程序】循环方阵构造(仿《剑指offer》循环矩阵打印)

1 /* 2 本程序说明: 3 4 输入:方阵大小n,输出:n*n的旋转方阵 5 6 举例: 7 当n=2时,输出: 8 1 2 9 4 3 10 当n=4时,输出: 11 1 2 3 4 12 12 13 14 5 13 11 16 15 6 14 10 9 8 7 15 16 */ 17 #include <iostream> 18 #include <vector> 19 20 using namespace std; 21 22 void PrintMatrixInCirc

【模板小程序】大数相加(十进制),包含合法性检查

1 //大数相加(十进制),用string处理 2 #include <iostream> 3 #include <string> 4 #include <algorithm> 5 6 using namespace std; 7 8 //输入数据合法性检查,数字必须在0-9范围内 9 bool IsVaild(const string& num1,const string& num2) 10 { 11 for(auto val:num1) 12 { 1

【模板小程序】2~62位非负数任意进制转换,包含合法性检查

1 //进制转换模块 2 #include <iostream> 3 #include <string> 4 #include <cmath> 5 #include <algorithm> 6 7 using namespace std; 8 9 //将任意字符转换为十进制 [0-9a-zA-Z],61个字符,最大表示62进制 10 int convertToDec(char c) 11 { 12 int decNum; 13 if(c>='0' &a

【模板小程序】任意长度十进制数转化为二进制(java实现)

妈妈再也不用担心十进制数过大了233 import com.google.common.base.Strings; import java.math.BigInteger; import java.util.Scanner; /** * 任意长度十进制数转化为二进制 */ public class AnyNumberConverterFromDecimalToBinary { /** * * @param srcNum 待转换的十进制数 * @return 二进制字符串 */ private s

微信小程序-整理各种小程序源码和资料免费下载

微信小程序整理下载 [小程序源码]微信小程序-车源宝微信版 [小程序源码]小程序-微赞社区(论坛demo) [小程序源码]微信小程序-收支账单 [小程序工具]微信小程序-日历 [小程序源码]小程序-在线聊天功能 [小程序源码]微信小程序-大好商城(新增功能天气查询和2048游戏) [小程序源码]微信小程序-查询号码归属地 [小程序源码]微信小程序-备忘录2 [小程序源码]微信小程序-QQ音乐 [小程序源码]小程序-货币汇率 [小程序源码]微信小程序-大学图书馆 [小程序源码]小程序-积分商城 [

开源的Jshop微信小程序商城源码

开源Jshop小程序商城 官方地址 官方网站:https://www.jihainet.com/ 开源仓库:https://gitee.com/hnjihai/jshop_mall 交流QQ群:823732583 项目介绍 Jshop小程序商城,是一款开源的电商系统,为中小企业提供移动电子商务解决方案.后台采用Thinkphp5.1框架开发,执行效率.扩展性.稳定性值得信赖,前台H5采用VUE开发,增加用户体验. 关于开源 这不是一款免费的系统,商用记得授权哦,当然了,我们目前也不会强制授权,代