/*已知一个排好序的数组,按数组原排序方式插入一个数据*/std::vector<int>shuzu = {1,2,3,4,5,7,8,9};int x = 0, caru = 6;std::vector<int>::iterator iter;for (iter = shuzu.begin(); iter != shuzu.end(); iter++){if (*iter > caru)break;x++;}shuzu.insert(shuzu.begin() + x, caru);x = 0;for (iter = shuzu.begin(); iter != shuzu.end(); iter++)std::cout << "#" << x++ << ":" << *iter << std::endl;

2020年9月27日,有人看,我也看,突然想能否写出折半查找法,因为,我一直没用一个排好序的数组写过折半查找法,为此在之上代码基础上修改,查阅资料写了如下折半查找算法,只是设计完成,没去优化。

void 按数组原排序方式插入一个数据()
{//修改为O(n/2)折半查找法,先获取数组中间值判断大小从而选择寻找方向,不包含整个算法时间复杂度,整个算法时间复杂度O(n+n/2)。std::vector<int>shuzu = { 1, 2, 3, 4, 5, 7, 8, 9 };int caru = 10, z = shuzu.at(shuzu.size() / 2 - 1)>caru ? 1 : 0, x = z ? 0 : shuzu.size() - 1;std::vector<int>::iterator iter;for (iter = z ? shuzu.begin() : --shuzu.end(); iter != (z ? shuzu.end() : shuzu.begin()); z ? iter++ : iter--)if (z ? *iter > caru:*iter < caru) break; else z ? ++x : --x;shuzu.insert(shuzu.begin() + x + (z ? 0 : 1), caru);x = 0;for (iter = shuzu.begin(); iter != shuzu.end(); iter++)std::cout << "#" << x++ << ":" << *iter << std::endl;
}

2020年9月29日,忽然想起能否不断地二分下去,直到缩小到某范围为止,于是,写了如下循环二分法,称为二分分法:

void 按数组原排序方式插入一个数据2分分法(int 数 = 14)
{//缘由https://mp.csdn.net/console/editor/html/46706509//修改为循环二分法,只要范围大等于2就不停二分,以进一步缩小最终查找的循环。std::vector<int>shuzu = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,  15, 16, 17, 18, 19, 20 };int dx = shuzu.size(), ef = dx / 2, ca = ef;while (ca > 2)if (shuzu.at(ef)>数)ef -= ca /= 2;//往前elseef += ca /= 2;//往后while (shuzu.at(ef) > 数)--ef;while (shuzu.at(ef) < 数)++ef;shuzu.insert(shuzu.begin() + ef, 数);ca = 0;while (ca <= dx)cout << shuzu.at(ca++) << ends;cout << endl;
}

初测1000个数据插入一个数据最多循环14次,10000个数据插入一个数据最多循环17次,这里的循环量指的是找到位置。

void 按数组原排序插入分分法(vector<int>shuzu, int 数 = 14)
{//缘由https://mp.csdn.net/console/editor/html/46706509//修改为循环二分法,只要范围大等于2就不停二分,以进一步缩小最终查找的循环。int dx = shuzu.size(), ef = dx / 2, ca = ef, t=0,z=0;bool 升 = shuzu.at(0) < shuzu.at(1);while (ca > 1)if (升 ? shuzu.at(ef) > 数 : shuzu.at(ef) < 数)ef -= ca /= 2,++t;//往前elseef += ca /= 2,++t;//往后while (升 ? shuzu.at(ef) > 数 : shuzu.at(ef) < 数)--ef, ++z;while (升 ? shuzu.at(ef) < 数 : shuzu.at(ef) > 数)++ef, ++z;shuzu.insert(shuzu.begin() + ef, 数);ca = 0;while (ca <= dx)cout << shuzu.at(ca++) << ends;cout <<t<<ends<<z<< endl;
}std::vector<int>shuzu = { 1 };int a = 1, aa = 47, aaa = 0;while (a < aa)shuzu.insert(shuzu.begin() + (a - 1), ++a + ++aaa);a = 0;while (a < aa + aaa)按数组原序插入分分法(shuzu, ++a);

八大排序法动画参考 2020年10月2日依据之上算法为基础可提高直接插入排序法效率【依据推理应在O(n)至O(n*n/2)初测O(n)至O(n*n/3)】,插入排序法最大缺点移动次数太多。函数原型void 定分直插排序法(int 数组[], int 数, int 位);

/*已知一个排好序的数组,按数组原排序方式插入一个数据*/相关推荐

  1. 已知满二叉树先序序列存在于数组中,设计算法将其变成后序序列

    解题思路: 满二叉树:除最后一层无任何子结点外,每一层上的所有结点都有两个以上的结点 先序序列:DLR 后序序列:LRD 先从最简单的满二叉树开始: 1.只有一个结点的满二叉树 2.有三个结点的满二叉 ...

  2. C语言-数组和指针-11(已有一个排号序的数组,要求输入一个数后,按原来的排序规律将它插入数组中)

    题目: 已有一个排号序的数组,要求输入一个数后,按原来的排序规律将它插入数组中 源代码: #include <stdio.h> #define ROW 7 int main(){int a ...

  3. 已知前序(后序)遍历序列和中序遍历序列构建二叉树(Leetcode相关题目)

    1.文字描述: 已知一颗二叉树的前序(后序)遍历序列和中序遍历序列,如何构建这棵二叉树? 以前序为例子: 前序遍历序列:ABCDEF 中序遍历序列:CBDAEF 前序遍历先访问根节点,因此前序遍历序列 ...

  4. JAVA-集合作业-已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数...

    第二题 已知有十六支男子足球队参加2008 北京奥运会.写一个程序,把这16 支球队随机分为4 个组.采用List集合和随机数 2008 北京奥运会男足参赛国家: 科特迪瓦,阿根廷,澳大利亚,塞尔维亚 ...

  5. [算法] 已知前序和后序遍历,建立二叉树

    结点结构 typedef struct Node{char data;struct Node *left;struct Node *right; }Node; 已知前序和后序遍历,建立二叉树(不唯一, ...

  6. [算法] 已知前序和中序遍历,建立二叉树

    结点结构 typedef struct Node{char data;struct Node *left;struct Node *right; }Node; 已知前序和中序遍历顺序,建立二叉树 问题 ...

  7. 已知前序(先序)与中序输出后序

    已知前序(先序)与中序输出后序: 前序:1, 2, 3, 4, 5, 6(根左右) 中序:3, 2, 4, 1, 6, 5(左根右) 分析:因为前序(根左右)最先出现的总是根结点,所以令root为前序 ...

  8. PAT甲级1020变体:已知二叉树层序+中序序列,求后序遍历序列

    PAT甲级1020变体:已知二叉树层序+中序序列,求后序遍历序列 题目 输入格式 输出格式 输入样例 输出样例 代码 题目 已知二叉树层序+中序序列,求后序遍历序列. 输入格式 第一行给出该二叉树的节 ...

  9. 已知有十六支男子足球队参加2008 北京奥运会。 写一个程序,把这16 支球队随机分为4 个组,每组4只球队。采用List集合和随机数。

    已知有十六支男子足球队参加2008 北京奥运会. 写一个程序,把这16 支球队随机分为4 个组,每组4只球队.采用List集合和随机数. package com.qianfeng._wy;import ...

最新文章

  1. 1024 鲲鹏开发者技术沙龙·福州站圆满收官!给程序员的福利你收到了吗?
  2. 杭电2063--过山车(二分匹配)
  3. 深入理解JavaScript的变量作用域
  4. Angular组件——投影
  5. PostgreSQL在何处处理 sql查询之三十九
  6. IBM X3650 M4服务器安装centos找不到硬盘的解决方法
  7. MySQL的简单使用-(一)
  8. 基于 Redis 实现的分布式锁
  9. distinct和group by的性能比较
  10. Memcached 缓存个体,对象,泛型,表
  11. [C++STL]常用排序算法
  12. java tcp 线程_java 网络协议(一)Tcp多线程服务器端编程
  13. cloudfoundry servicce-broker部署错误分析
  14. 元胞自动机生命游戏C语言并行实现
  15. 什么是tftp服务器? 如何搭建tftp服务器?
  16. 使用wait函数获取子进程终止状态
  17. Android 沉浸式(透明)状态栏细研-超级细还附 Demo
  18. 什么是链表php概念,链表 · PHP知识大纲 · 看云
  19. 【Mybatis框架】初识Mybatis
  20. lucene geohash 在外卖场景中,商家不规则多边形配送范围技术应用

热门文章

  1. 让自己面对外部刺激,更加从容淡定
  2. 【一周头条盘点】中国软件网(2018.9.17~2018.9.21)
  3. Php amqp 效率低,php 使用rabbitmq 踩坑记录
  4. 单商户商城系统功能拆解27—营销中心—拼团活动
  5. 迅为RK3588开发板国产瑞芯微适用于ARM PC边缘计算NVR等服务器级板卡
  6. 做题记录 To 2019.2.13
  7. Windows注册自定义URL协议
  8. word标题突然变成黑方框???
  9. table表格取消显示表头
  10. 自己整理的前端开发面试题