11.25快速排序细节,sort函数,二分使面积差最小

快速排序

i从左边开始,遇到大于等于x的停下来,j遇到小于等于x的停下来,然后如果i<j,就交换。

递归可能有两种写法,即开始,左-1,左,结束

与开始,右,右+1,结束

对于左指针而言,左边的值是确定的,一定小于等于x;

然后对于右指针而言,j右边的值,一定都是大于等于x

当基值 

#include <iostream>
#include <vector>
#include <algorithm>
#include<stack>
#include<queue>
#include <unordered_set>
using namespace std;
int arr[1005], n;
void fp() {for (int i = 0; i < n; i++) {cout << arr[i];if (i != n - 1) {cout << " ";}}cout << endl;
}
void quick(int begin, int end) {if (begin > end) {return;}int l = begin, r = end, p = arr[begin];while (l != r) {while (r > l && arr[r] >= p) {r--;}while (r > l && arr[l] <= p) {l++;}if (r > l) {swap(arr[r], arr[l]);}}arr[begin] = arr[l];arr[l] = p;fp();quick(begin, l - 1);quick(l + 1, end);
}
int main() {cin >> n;for (int i = 0; i < n; i++) {cin >> arr[i];}quick(0, n - 1);return 0;
}

如果比

sort函数

 

sort函数至少需要两个参数,为起点与终点,只传入数组名,数组名就是数组的起点,加数,就是对应的长度

二分,使面积差最小

这个check函数就是说,输入一个中间值,这个值就是划分的分界线,然后在函数里,计算左边的面积,以及右边的面积,对于每个矩形

每个矩形,记录它左边和右边,然后有一个函数getd,用来得到左右面积差值,如果左边在边界后,就全加在右面积里,如果都在边界前,就全部加在左面积里

记录一个最小面积差

#include <iostream>
#include <vector>
#include <algorithm>
#include<stack>
#include<queue>
#include <unordered_set>
using namespace std;
#define ll long long
const int N = 105;
struct node {int l, r, w, h;
}s[N];
int n;
ll getd(int mid) {ll sl = 0, sr = 0;for (int i = 1; i <= n; i++) {if (s[i].r <= mid) {sl += (ll)s[i].w * s[i].h;}else if (s[i].l >= mid) {sr += (ll)s[i].w * s[i].h;}else {sl += (ll)s[i].h * (mid - s[i].l);sr += (ll)s[i].h * (s[i].r - mid);}}return sl - sr;
}
//就是说,地图上有很多块,然后划一条线,使这条线上所有左侧的块都归属于A
//剩下的都给B,然后要让A>>B
//自左到右,累积的岛屿面积是不断增加的
//也就是说每个x坐标轴都对应一个值,这个值就是自左到右的岛屿面积,类似于分布函数int main() {cin >> n;int R = 0, L = 1000;for (int i = 1; i <= n; i++) {int x, y, w, h;cin >> x >> y >> w >> h;s[i].l = x, s[i].r = x + w, s[i].w = w, s[i].h = h;R = max(R, s[i].r);L = min(L, s[i].l);}int ans = -1;ll da = 1e10;while (L <= R) {int mid = (L + R) >> 1;ll t = getd(mid);if (t < 0) {L = mid + 1;}else {da = min(da, t);R = mid - 1;ans = mid;}}//  while (ans < R && getd(ans + 1) == da) {//    ans++;//}cout << ans;return 0;
}


 二叉树的中序遍历

#include <iostream>
#include <vector>
#include <algorithm>
#include<stack>
#include<queue>
#include <unordered_set>
#include<string>
using namespace std;
struct node {char data;node* lchild, * rchild;node(char x) :data(x), lchild(nullptr), rchild(nullptr) {}
};
int index = 0;
node* buildtree(string preorder) {if (index >= preorder.length()) {return nullptr;}char t = preorder[index++];if (t == '#') {return nullptr;}node* root = new node(t);root->lchild = buildtree(preorder);root->rchild = buildtree(preorder);return root;
}
void in(node* root) {if (root == nullptr) {return;}in(root->lchild);cout << root->data;in(root->rchild);
}
int main() {string preorder;cin >> preorder;node* root = buildtree(preorder);in(root);return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>
#include<stack>
#include<queue>
#include <unordered_set>
#include<string>
using namespace std;
int n, i, j;
int arr[100], target[100];
int main() {cin >> n;for (int i = 0; i < n; i++) {cin >> arr[i];}for (int i = 0; i < n; i++) {cin >> target[i];}for (i = 0; i < n - 1 && target[i] <= target[i + 1]; i++);for (j = i + 1; target[j] == arr[j] && j < n; j++);if (j == n) {cout << "Insertion Sort" << endl;sort(arr, arr + i + 2);}else {cout << "Merge Sort" << endl;int flag = 1, k = 1;while (flag) {flag = 0;for (int i = 0; i < n; i++) {if (arr[i] != target[i]) {flag = 1;//如果有一个不相同,就说明还没归并到这个阶段,就继续模拟进行归并}k = k << 1;for (int i = 0; i < n / k; i++) {sort(arr + i * k, arr + (i + 1) * k);}sort(arr + n / k * k, arr + n);}}      }for (int i = 0; i < n; i++) {if (i) {cout << " ";}cout << arr[i];}return 0;
}

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

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

相关文章

FLASK博客系列5——模板之从天而降

我们啰啰嗦嗦讲了4篇&#xff0c;都是在调接口&#xff0c;啥时候能看到漂亮的页面呢&#xff1f;别急&#xff0c;今天我们就来实现。 来我们先来实现一个简单的页面。不多说&#xff0c;上代码。 app.route(/) def index():user {username: clannadhh}return <html>&…

【探索Linux】—— 强大的命令行工具 P.17(进程信号 —— 信号保存 | 阻塞信号 | sigprocmask() | sigpending() )

阅读导航 引言一、阻塞信号1. 信号相关常见概念&#xff08;1&#xff09;信号递达&#xff08;2&#xff09;信号未决&#xff08;3&#xff09;阻塞信号&#xff08;4&#xff09;忽略信号 2. 信号在内核中的表示⭕信号在内核中的表示示意图 3. sigset_t &#xff08;数据类型…

用于图像分类任务的经典神经网络综述

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

【高并发写】库存系统设计

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

在CI/CD中使用submodule

背景信息 客户的submodule使用的是ssh协议拉取 前置操作 gitlab添加子模块 git clone ssh://gitkube.bdeet.top:2222/cicd/123.git cd 123/ ls -la git submodule add ssh://gitkube.bdeet.top:2222/approve/test-1.git git submodule add ssh://gitkube.bdeet.top:2222/mr…

java学习part16代码块

108-面向对象(高级)-类的成员之四&#xff1a;代码块_哔哩哔哩_bilibili 1. 代码块只能static修饰&#xff0c;不存在权限修饰。 因为它是在某种情况下自动执行的&#xff0c;不存在调用的情况。 非静态代码块随着对象创建自动执行&#xff08;一个对象执行一次&#xff09;…

C++基础 -6-二维数组,数组指针

二维数组在内存中的存放方式和一维数组完全相同 下表把二维数组抽象成了行列形式方便理解 a[0]指向第一行首元素地址 a指向第一行的首地址 所以a地址和a[0]地址相同,因为起点相同 但a[0]1往右偏移 但a1往下方向偏移 方便理解 an控制行 a[0]n控制列(相当于*an) 数组指针指向二…

二叉树OJ题讲解之一

今天我们一起来做一道初级的二叉树OJ题&#xff0c;都是用递归思想解答 力扣965.单值二叉树 链接https://leetcode.cn/problems/univalued-binary-tree/description/ 所谓单值二叉树就是这棵二叉树的所有节点的值是相同的&#xff0c;那我们要做这道题&#xff0c;肯定要…

【EI会议征稿】第四届应用数学、建模与智能计算国际学术会议(CAMMIC 2024)

第四届应用数学、建模与智能计算国际学术会议&#xff08;CAMMIC 2024&#xff09; 2024 4th International Conference on Applied Mathematics, Modelling and Intelligent Computing 第四届应用数学、建模与智能计算国际学术会议&#xff08;CAMMIC 2024&#xff09;将于…

计算机网络——数据链路层-数据链路层概述(介绍、三个重要问题、使用广播信道的数据链路层、其他问题)

目录 介绍 三个重要问题 封装成帧 差错检测 可靠传输 使用广播信道的数据链路层 其他问题 介绍 本篇对数据链路层进行概述&#xff0c;我们首先来看看数据链路层在网络体系结构中的地位&#xff1a; 主机H1给主机H2发送数据&#xff0c;中间要经过三个路由器和电话网、…

基于mpvue实现的cnode社区demo(附精选源码32套,涵盖商城团购等)

社区类目没有开放给个人开发者&#xff0c;所以没能上线。 预览 项目配置文件&#xff0c;更改appid {"description": "项目配置文件","setting": {"urlCheck": true,"es6": false,"postcss": false,"minif…

预览功能实现

需求&#xff1a;将后端返回来的文字或者图片和视频展示在页面上。 <!-- 预览 --><el-dialog title"预览" :visible.sync"dialogPreviewVisible" width"50%" append-to-body :close-on-click-modal"false" close"Previe…