在C++中的合并排序树

在c++中的合并排序树

We are given an integer array, a set of segment start and end pointers and a key value and the problem statement here is to find all the values in the given range which are smaller than or equal to the given key value.

Let us understand with example

Input − arr[] = {7, 8 , 1, 4 , 6 , 8 , 10 }

Segment 1: start = 2, end = 4, k = 2

Segment 2: start = 1, end = 6, k = 3

立即学习“C++免费学习笔记(深入)”;

Output − Count of number which are smaller than or equal to key value in the given range are 2 6

Explanation − [8, 1, 4] represents the range from 2 to 4 and 2 is the 2nd smallest number in the range[7, 8 , 1, 4 , 6 , 8 ]代表从1到6的范围,6是范围内第三小的数字

输入 – arr[] = {2, 7 , 9, 4 , 6 , 5 , 1 |

段落1:起始位置=3,结束位置=6,k=4

段落2:起始位置=2,结束位置=5,k=3

输出 – 在给定范围内小于或等于关键值的数字的数量为:9 7

解释 – [9, 4 , 6 , 5]代表从3到6的范围,9是给定范围内第四小的数字[7 , 9, 4 , 6 ] 表示从2到4的范围,7是给定段范围中第3小的数字

下面程序中使用的方法如下:

声明一个整数类型的数组。计算数组的大小。声明一个向量类型的变量,形成整数类型的对。开始FOR循环,将数据从数组推送到向量中。

对给定的向量进行排序。创建一个整数类型的向量数组,大小为MAX。

调用函数generateTree(1, 0, size – 1, vec, tree),并将getSmallestIndex设置为queryWrapper(2, 5, 2, size, vec, tree)。

打印input[getSmallestIndex]。

将getSmallestIndex设置为调用函数queryWrapper(1, 6, 4, size, vec, tree)。

在函数generateTree(int treeIndex, int leftIndex, int rightIndex, vector > &a, vector tree[])内部

检查IF leftIndex to rightIndex,然后设置tree[treeIndex].push_back(a[leftIndex].second) and return

Set midValue to (leftIndex + rightIndex) / 2and call generateTree(2 * treeIndex, leftIndex, midValue, a, tree), generateTree(2 * treeIndex + 1, midValue + 1, rightIndex, a, tree) and merge(tree[2 * treeIndex].begin(), tree[2 * treeIndex].end(), tree[2 * treeIndex + 1].begin(). Set tree[2 * treeIndex + 1].end(),back_inserter(tree[treeIndex]))

Inside the function as int calculateKSmallest(int startIndex, int endIndex, int queryStart, int queryEnd, int treeIndex, int key, vector tree[])

Check IF startIndex to endIndex then return tree[treeIndex][0]

Set mid to (startIndex + endIndex) / 2, last_in_query_range to (upper_bound(tree[2 * treeIndex].begin(),tree[2 * treeIndex].end(), queryEnd) – tree[2 * treeIndex].begin())

set first_in_query_range to (lower_bound(tree[2 * treeIndex].begin(),tree[2 * treeIndex].end(), queryStart) – tree[2 * treeIndex].begin()) and M to last_in_query_range – first_in_query_range

Check IF M greater than equals to key then return calculateKSmallest(startIndex, mid, queryStart,queryEnd, 2 * treeIndex, key, tree)

ELSE, then return calculateKSmallest(mid + 1, endIndex, queryStart, queryEnd, 2 * treeIndex + 1, key – M, tree).

Inside the function int queryWrapper(int queryStart, int queryEnd, int key, int n, vector > &a, vectortree[])

return call to the function calculateKSmallest(0, n – 1, queryStart – 1, queryEnd – 1, 1, key, tree)

Example

#include using namespace std;const int MAX = 1000;void generateTree(int treeIndex, int leftIndex, int rightIndex, vector > &a, vector tree[]){   if (leftIndex == rightIndex){      tree[treeIndex].push_back(a[leftIndex].second);      return;   }   int midValue = (leftIndex + rightIndex) / 2;   generateTree(2 * treeIndex, leftIndex, midValue, a, tree);   generateTree(2 * treeIndex + 1, midValue + 1, rightIndex, a, tree);   merge(tree[2 * treeIndex].begin(), tree[2 * treeIndex].end(), tree[2 * treeIndex + 1].begin(),   tree[2 * treeIndex + 1].end(), back_inserter(tree[treeIndex]));}int calculateKSmallest(int startIndex, int endIndex, int queryStart, int queryEnd, int treeIndex, int key, vector tree[]){      if (startIndex == endIndex){         return tree[treeIndex][0];      }      int mid = (startIndex + endIndex) / 2;      int last_in_query_range = (upper_bound(tree[2 * treeIndex].begin(), tree[2 * treeIndex].end(), queryEnd) - tree[2 * treeIndex].begin());      int first_in_query_range = (lower_bound(tree[2 * treeIndex].begin(), tree[2 * treeIndex].end(),queryStart) - tree[2 * treeIndex].begin());      int M = last_in_query_range - first_in_query_range;      if (M >= key){         return calculateKSmallest(startIndex, mid, queryStart, queryEnd, 2 * treeIndex, key, tree);      }      else {         return calculateKSmallest(mid + 1, endIndex, queryStart,queryEnd, 2 * treeIndex + 1, key - M, tree);      }}int queryWrapper(int queryStart, int queryEnd, int key, int n,   vector > &a, vector tree[]){      return calculateKSmallest(0, n - 1, queryStart - 1, queryEnd - 1, 1, key, tree);}int main(){   int input[] = { 7, 8 , 1, 4 , 6 , 8 , 10 };   int size = sizeof(input)/sizeof(input[0]);   vector > vec;   for (int i = 0; i  tree[MAX];   generateTree(1, 0, size - 1, vec, tree);   cout

输出

如果我们运行上述代码,将会生成以下输出

Count of number which are smaller than or equal to key value in the given range are:46

登录后复制

以上就是在C++中的合并排序的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2582097.html

(0)
上一篇 2025年3月6日 14:08:20
下一篇 2025年3月3日 00:26:48

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 给定一个数,其与原始数之和等于另一个给定的数的排列方式

    在本文中,我们将深入探讨一个涉及数字和排列的迷人问题:“一个数与原始数的和等于另一个给定数的排列”。这个问题将数论和组合数学独特地结合在一起,使它成为一个引人入胜的挑战。 为了澄清,给定一个原始数和一个目标数,我们需要找到原始数的一个排列,…

    2025年3月6日
    200
  • 递归在 C++ 数据结构中的妙用:栈和树的实现

    递归在 c++++ 数据结构中的应用:栈:通过后进先出 (lifo) 结构递归实现栈。树:通过分层结构递归实现树,支持插入和深度计算等操作。递归为处理嵌套结构提供了简洁高效的解决方案,使数据结构的实现更加直观和易于维护。 递归在 C++ 数…

    2025年3月6日
    200
  • php初学者看什么书?

    如果你学过其他的语言,你会发现php其实还算简单的。有人说php学习适合看手册,但是依然有很多的经典书可以帮助大家入门和提高。以下4本你就可以好好读读。 1、《细说PHP》 PHP入门的经典,内容详实易懂,全面涵盖了web开发的所需的知识内…

    2025年3月5日 编程技术
    200
  • 2025年全球最靠谱的数字货币交易所排名top10推荐

    本文对比分析了OKX、Gate.io、Binance、Coinbase、Gemini、Kraken、KuCoin、Bybit和Crypto.com九大主流加密货币交易所。文章从关键数据、核心优势和潜在不足三个维度,对各平台的交易对数量、杠杆…

    2025年3月4日 区块链
    400
  • 币安binance官网登录入口网页版在线

    币安(Binance)是全球领先的加密货币交易平台,成立于2017年,总部位于马耳他。凭借其高速交易、全球覆盖和丰富的生态系统,币安迅速崛起,曾创下日交易额高达760亿美元的记录。平台提供现货、期权、合约等多种交易产品,涵盖150多种加密货…

    2025年3月4日
    400
  • iOS 18.3 beta3测评

    苹果 ios 18.3 beta 3 近日发布,引起了广泛关注。本篇测评将带大家深入了解 ios 18.3 beta 3 的主要更新和改进,包括全新的功能、问题修复和性能优化。随着苹果不断迭代 ios 18 系统,ios 18.3 beta…

    2025年3月3日 互联网
    200
  • python数据结构树和二叉树简介

    一、树的定义 树形结构是一类重要的非线性结构。树形结构是结点之间有分支,并具有层次关系的结构。它非常类似于自然界中的树。树的递归定义:树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:(1)有且仅有一个…

    编程技术 2025年2月28日
    200
  • Python使用PyGreSQL操作PostgreSQL数据库教程

    postgresql是一款功能强大的开源关系型数据库,本文使用python实现了对开源数据库postgresql的常用操作,其开发过程简介如下: 一、环境信息:    1、操作系统:         RedHat Enterprise Li…

    编程技术 2025年2月28日
    200
  • Python选择排序、冒泡排序、合并排序代码实例

    前两天刚装了python 3.1.1, 禁不住技痒写点code。1.选择排序 复制代码 代码如下:>>> def SelSort(L):    length=len(L)    for i in range(length-…

    编程技术 2025年2月28日
    200
  • MySQL主从数据库同步延迟问题解决

    最近在做MySQL主从数据库同步测试,发现了一些问题,其中主从同步延迟问题是其中之一,下面内容是从网上找到的一些讲解,记录下来 最近在做mysql主从数据库同步测试,发现了一些问题,其中主从同步延迟问题是其中之一,下面内容是从网上找到的一些…

    数据库 2025年2月23日
    200

发表回复

登录后才能评论