算法导论水壶问题(第三版第八章思考题8-4)

算法导论水壶问题

(第三版第八章思考题8-4)
本算法只适用于解题,不通用。
期望的时间复杂度O(nlgn)
Kettle.h文件

#ifndef C11LEARN_KETTLE_H
#define C11LEARN_KETTLE_H#include <iostream>
#include <vector>
#include "../tools/random.h"
using namespace std;
class Kettle {
public:string color;float size;int identifier;
public:Kettle(string color,float size,int identifier);Kettle();
};
void matching_kettle(vector<Kettle> red,vector<Kettle> blue);#endif //C11LEARN_KETTLE_H

Kettle.cpp文件

#include "Kettle.h"
Kettle::Kettle(string color,float size,int identifier):color(color),size(size),identifier(identifier){};
Kettle::Kettle(){};
int quick_sort_partition(vector<Kettle>& red,vector<Kettle>& blue,int start,int end)
{int random = random_include_left_right(start,end);Kettle key = red[random];red[random] = red[end];red[end] = key;Kettle temp;int less_line = start - 1;for (int i = start; i < end; ++i) {if(blue[i].size < key.size){less_line++;temp = blue[i];blue[i] = blue[less_line];blue[less_line] = temp;}else if(blue[i].size == key.size){temp = blue[end];blue[end] = blue[i];blue[i] = temp;i--;}}key = blue[end];blue[end] = blue[less_line+1];blue[less_line+1] = key;temp = red[less_line+1];red[less_line+1] = red[end];red[end] = temp;less_line = start - 1;for (int i = start; i < end; ++i) {if(red[i].size < key.size){less_line++;temp = blue[i];red[i] = red[less_line];red[less_line] = temp;}}return less_line + 1;
}
void matching_kettle(vector<Kettle>& red,vector<Kettle>& blue,int start,int end){if(start<end){int k = quick_sort_partition(red,blue,start,end);matching_kettle(red,blue,start,k-1);matching_kettle(red,blue,k+1,end);}
}
void matching_kettle(vector<Kettle> red,vector<Kettle> blue){matching_kettle(red,blue, 0,red.size()-1);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于技术文章“标题党”一事我想说两句

阅读本文大概需要 1.8 分钟。前天发表的一篇文章&#xff0c;标题是&#xff1a;“面试官&#xff1a;你刚说你喜欢研究新技术&#xff0c;那么请说说你对 Blazor 的了解”。确实&#xff0c;这篇文章有标题党的味道&#xff0c;如果因此给部分童鞋带来不适&#xff0c;我在这先…

算法-排序-k排序(算法导论第三版第八章思考题8-5)

算法-排序-k排序 算法导论第三版第八章思考题8-5 时间复杂度Θ(nlg(n/k))。 利用最小堆完成&#xff0c;把元素分成k个堆&#xff0c;每个堆大小⌈n/k⌉。 利用堆作为子排序稳定&#xff0c;也可以采用其他排序作为子排序&#xff0c;子排序的算法时间复杂度保证在Θ(klgk)就行…

使用 nuget server 的 API 来实现搜索安装 nuget 包

使用 nuget server 的 API 来实现搜索安装 nuget 包Intronuget 现在几乎是 dotnet 开发不可缺少的一部分了&#xff0c;还没有用过 nuget 的就有点落后时代了&#xff0c;还不快用起来nuget 是 dotnet 里的包管理机制&#xff0c;类似于前端的 npm &#xff0c;php 的 composer…

找出第二小元素(算法导论第三版9.1-1题)

找出第二小元素&#xff08;算法导论第三版9.1-1题&#xff09; 时间复杂度Θ(n) 比较次数n⌈lgn⌉−2次 思路&#xff1a;将元素每次分成2部分&#xff0c;第一部分和第二部分元素成对比较。最终获得最小的元素&#xff0c;记录那些和最小元素比较后的失败的元素&#xff0c;…

Kubernetes:通过自动化节省IT预算的4种方法

导语大多数CIO和IT领导者都熟悉反复执行的任务“事半功倍”。在许多组织中&#xff0c;这都是现实&#xff0c;在各种其他因素&#xff08;例如宏观经济状况&#xff09;的影响下&#xff0c;这种趋势往往会起伏不定。正文有时&#xff0c;“用更少的钱做更多的事”可能会更准确…

找出最大值和最小值(算法导论第三版9.1-2)

找出最大值和最小值 &#xff08;算法导论第三版9.1-2) 在最坏的情况下&#xff0c;比较次数下界是⌈3n/2⌉−2 void find_maximum_and_minimum_element(int *array,int length,int &max,int &min){int remainder length % 2;int start_index 0;if(remainder){//奇…

《Unit Testing》1.4. 成功的测试套件拥有哪些属性?

什么造就了成功的测试套件如果测量测试套件的质量&#xff1f;唯一可行的办法就是对测试套件里每一个测试进行单独的评估。你不需要一次性把它们都评估完。你可以逐步的进行评估成功的测试套件拥有以下属性&#xff1a;集成到开发周期中只针对代码库中最重要的部分它以最低的成…

找出数组中第i小元素(时间复杂度Θ(n)--最坏情况为线性的选择算法

找出数组中第i小元素 期望时间复杂度&#xff1a;Θ(n) 最坏情况的时间复杂度Θ(n^2) int randomized_select(int *array,int start,int end,int index){if(start end)return array[start];int middle randomized_partition(array,start,end);int position middle - start…

C# 9.0 终于来了, Top-level programs 和 Partial Methods 两大新特性探究

一&#xff1a;背景1. 讲故事.NET 5 终于在 6月25日 发布了第六个预览版&#xff0c;随之而来的是更多的新特性加入到了 C# 9 Preview 中&#xff0c;这个系列也可以继续往下写了&#xff0c;废话不多说&#xff0c;今天来看一下 Top-level programs 和 Extending Partial Meth…

4位BCD计数器设计

状态转换: 输出函数: 4位BCD计数器设计:

[Mvp.Blazor] 集成Ids4,实现统一授权认证

&#xff08;又一个客户端集成了IdentityServer4&#xff09;还是很开心的&#xff0c;目前已经有六个开源项目都集成到了Ids4认证中心了。1、Blazor系列文章回顾书接上文&#xff0c;关于Blazor学习呢&#xff0c;我也发了几篇文章了&#xff0c;我一般写东西都喜欢偏实战&…

重学ASP.NET Core 中的标记帮助程序

标记帮助程序是什么标记帮助程序使服务器端代码可以在 Razor 文件中参与创建和呈现 HTML 元素。 例如&#xff0c;内置的 ImageTagHelper 可以将版本号追加到图片名称。 每当图片发生变化时&#xff0c;服务器都会为图像生成一个新的唯一版本号&#xff0c;因此客户端总能获得…

小型数字系统---运动码表设计

运动码表设计中码表控制器是最难的&#xff0c;所以主要介绍如何设计码表控制器。 我们先给这个时序电路设计状态以及编码 先设计状态转换函数 首先画出状态图: (其中我们让其一到000状态就立马变为001状态&#xff0c;110状态存储完数据立马变成100状态) 根据状态图&#…

用 aforge.net 小试一下验证码识别

今天来小玩一下 aforge.net 套用官方的话就是一个专门为开发者和研究者基于C#框架设计的&#xff0c;这个框架提供了不同的类库和关于类库的资源&#xff0c;还有很多应用程序例子&#xff0c;包括计算机视觉与人工智能&#xff0c;图像处理&#xff0c;神经网络&#xff0c;遗…