算法导论水壶问题

(第三版第八章思考题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);
}

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

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

    算法-排序-k排序 算法导论第三版第八章思考题8-5 时间复杂度Θ(nlg(n/k)). 利用最小堆完成,把元素分成k个堆,每个堆大小⌈n/k⌉. 利用堆作为子排序稳定,也可以采用其他排序作为子排序, ...

  2. 《算法导论》(CLRS)第三版 第3章总结

    1. 渐进记号     2. Stirling公式 3. 整数函数(Floors & Ceilings) 补充: ceil(n/2) = floor((n+1)/2) (注:该式是数学表达式, ...

  3. 带权中位数-算法导论第三版第九章思考题9-2

    带权中位数-算法导论第三版第九章思考题9-2 b 时间复杂度O(nlgn) float find_median_with_weights_b(float *array,int length) {qui ...

  4. 算法导论第三版第二章思考题答案

    算法导论第三版第二章思考题答案 第二章思考题 算法导论第三版第二章思考题答案 2.1 2.2 2.3 2.4 汇总传送门 2.1 #include<iostream> using name ...

  5. 《算法导论(原书第3版)》pdf

    下载地址:网盘下载 内容简介  · · · · · · 在有关算法的书中,有一些叙述非常严谨,但不够全面:另一些涉及了大量的题材,但又缺乏严谨性.本书将严谨性和全面性融为一体,深入讨论各类算法,并着力 ...

  6. 小浩算法目录汇总(20200320-第三版)

    到今天为止,小浩算法 "365刷题计划" 已经进行了65天,距离目标还有300天.创作题解70余篇,总计共20万字,得到8000读者的支持!在此说一声感谢,多亏了大家我才能坚持下来 ...

  7. 数据挖掘算法与原理(第三版)

    一.绪论 数据挖掘(分析):数据挖掘(分析)是从大量的.不完全的.有噪声的.模糊的.随机的数据集中识别有效的.新颖的.潜在有用的信息,以及最终可理解的模式的非平凡过程.它是一门涉及面很广的交叉学科,包 ...

  8. python基础教程第三版豆瓣-数据结构与算法必读书单吐血整理推荐【附网盘链接】...

    前言:技术书阅读方法论 一.速读一遍(最好在1~2天内完成) 人的大脑记忆力有限,在一天内快速看完一本书会在大脑里留下深刻印象,对于之后复习以及总结都会有特别好的作用. 对于每一章的知识,先阅读标题, ...

  9. 算法导论中英文版下载

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 算法导论 ...

最新文章

  1. php错误提示如何查询,php-如何显示我的MySQLi查询错误?
  2. 2招按摩轻松解除黑眼圈 - 生活至上,美容至尚!
  3. 【精心总结】java内存模型和多线程必会知识
  4. mysql sql select for update_mysql SELECT FOR UPDATE语句使用示例
  5. java点击按钮发出声音_响应触发按钮声音onKeyPress问题
  6. winform使用fastreport制作报表(二)使用
  7. eclipse svn 没有 connector
  8. STM32电机测速(正交或者霍尔编码器)
  9. caffe源码解析by薛云峰
  10. mysql_stmt_precheck_COM_STMT_PREPARE 1
  11. Python数据分析案例-消费者用户画像
  12. 通过ip地址连接局域网内的打印机(win7、win10)
  13. 学习笔记 | 演化简单的程序用于玩 Atari 游戏
  14. MacBook超好用的流程图软件推荐
  15. 如何把EXCEL文本格式里的数字批量转成文本
  16. Axmath:一款Word公式编辑神器
  17. python 列表作业
  18. String中与获取相关的几个方法
  19. 2020年综合评价备考全知道(附31所综合评价院校名单)
  20. 一线PPT制作理论——简洁电磁环境构建

热门文章

  1. Android之基于xmpp openfire smack开发之Android消息推送技术原理分析和实践[4]
  2. [python opencv 计算机视觉零基础到实战] 十八、用鼠标进行画画
  3. 谷歌不支持调用摄像头麦克风_谷歌发布安卓11系统:全新界面、更严的隐私管理...
  4. python自带的函数有哪些_为什么说 Python 内置函数并不是万能的?
  5. 看似毫无规律的各种现象
  6. 中国这10条逆天公路,火爆外网,你都认识多少?
  7. 他言行不一屡次跳槽,还升职加薪走上了人生巅峰,全数学界都炸了......
  8. 酸了!第一名+第三名的学霸情侣,分别直博清华、人大…
  9. 众望所归!中国机器狗能【后空翻】了。。。
  10. 82 个代码案例实践,带你学好 Python 机器学习