C++快速找到(近似)中位数

//3、 一个长度未知的巨型向量分布在 n 台机器上, 如何快速找到(近似)中位数?

1、如果内存足够的情况下,可以取出n台机器上的所有数据,利用快速排序算法将所有数据
排序,取中位值。快速排序算法如下。
第一种情况模拟1000000条数据,进行快排取中位值。
2、如果内存不够,可以分别对每台机器上的数据用快速排序取中位值,然后保存n条结果,最
后对n个结果进行快排,取中位值,近似为全局的中位值。
第二种情况模拟100个机器,每个机器上有1000000条数据。
*/
//快排
inline void quick(vector<int>& all, int left, int right) {
   
   
	int jizhun, i, j;
	if (left > right)return;//不合逻辑
	jizhun = all[left];//找到基准值
	i = left;//左右指针
	j = right;
	while (i != j) {
   
   
		while (jizhun <= all[j] && i < j)j--;//从右至左找到小于基准值的
		while (jizhun >= all[i] && i < j)i++;//从左至右找到大于基准值的
		if (i < j)swap(all[i], all[j]);//找到后交换,使基准值左边的值小于他,右边的大于他。
	}
	all[left] = all[i];//把基准值放到适当的位置,符合上面的注释
	all[i] = jizhun;
	quick(all, left, i - 1);//左
### C++ 中不同数据类型的占用位数 在 C++ 编程语言中,不同的数据类型具有特定的存储需。这些需通常以字节(byte)为单位表示,并且具体大小可能因编译器和目标平台而异。 #### 基本数据类型及其位数 以下是常见的基本数据类型以及它们的标准位数范围: - **`bool`**: 表示布尔值 `true` 或 `false`。虽然理论上只需要一位来存储该信息,但在大多数实现中它被分配至少一个字节的空间[^1]。 - **`char`**: 存储单个字符,通常是 ASCII 字符集的一部分。它的大小固定为 1 字节 (8 bits)。 - **`int`**: 整数值,默认情况下其宽度足以容纳 [-32767, +32767] 范围内的值,在现代系统上一般占据 4 字节 (32 bits),但这不是强制性的标准。 - **`float` 和 `double`**: 浮点数分别采用 IEEE 754 单精度(4 bytes/32bits) 及双精度格式(8 bytes/64bits) 来表达实数近似值。 对于更精确控制内存布局的情况,则需考虑复合结构体如 `_p` 的成员排列方式所带来的填充效应。例如给定定义: ```cpp typedef struct _p{ char c1; char c2; char c3; int i1; } p; ``` 尽管单独看各字段仅需总计 7 字节空间(`3*char + 1*int`) ,但由于对齐规则的存在,实际对象尺寸可能会增加到下一个最接近处理器自然边界倍数的位置处停止增长——这里假设基于常见 x86 架构下的四字节整数对齐约束条件下最终得到的结果应不少于 8 字节[^3]。 另外值得注意的是当涉及到常数量化时还可以通过附加特殊后缀进一步指定确切类别属性比如 'L'/'l'代表长整形(long integer),‘U’/'u'则标记无符号(unsigned variant)[^2]. 综上所述,C++中的每一种基础数据单元都有各自默认关联长度规格说明但同时也允许开发者依据项目需灵活调整配置参数从而满足多样化应用场景的要. ```cpp #include <iostream> using namespace std; int main() { cout << "Size of bool: " << sizeof(bool) << " byte(s)" << endl; cout << "Size of char: " << sizeof(char) << " byte(s)" << endl; cout << "Size of int: " << sizeof(int) << " byte(s)" << endl; cout << "Size of float: " << sizeof(float) << " byte(s)" << endl; cout << "Size of double: " << sizeof(double) << " byte(s)" << endl; return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一步倾川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值