IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++,合并区间 -> 正文阅读

[C++知识库]C++,合并区间

#include<iostream>
using namespace std;
typedef struct
{
	int min;//区间的最小值(interval minimum
	int max;//区间最大值(interval maximum)
}section;
void Sort(section sect[],int length)//对区间进行排序(sort intervals)
{
	if (length <= 1)
		return;
	//使用哈希排序(use hash sort)
	int d = length / 2;
	for (; d > 0; d = d / 2)
	{
		for (int i = d; i < length; ++i)
		{
			section temp = sect[i];
			int j = i - d;
			for (; j >= 0 && sect[j].min > temp.min; sect[j + d] = sect[j], j = j - d);
			sect[j + d] = temp;
		}
	}
}
void Output(section sect[],int length)
{
	if (length <= 0)
		return;
	
	for (int i = 0; i < length; ++i)
	{
		cout << "[" << sect[i].min << "," << sect[i].max << "]" << "\t";
	}
}
void Merge(section sect[], int &length)
{
	if (length <= 1)
		return;
	int count = 0;//记录区间减少的长度(reduced length of recording interval)
	for (int i = 0; i < length-count-1;)
	//所有元素的都有前移了,真正要用的数组长度也应改变
	//第三第四位数据一样避免死循环所以,在用的长度减一
	{
		if (sect[i].max < sect[i + 1].min)//证明没交集(prove no intersection)
		{
			cout << "[" << sect[i].min << "," 
				<< sect[i].max << "]  [" 
				<< sect[i + 1].min << "," 
				<< sect[i + 1].max << "]无交集" << endl;
			++i;
		}
		else
		{
			cout << "[" << sect[i].min << ","
				<< sect[i].max << "]  ["
				<< sect[i + 1].min << ","
				<< sect[i + 1].max << "]有交集" << endl;
			sect[i].min = sect[i].min < sect[i + 1].min ? sect[i].min : sect[i + 1].min;
			sect[i].max = sect[i].max < sect[i + 1].max ? sect[i + 1].max : sect[i].max;
			//合并区间后相当于区间个数减少一个,数组往前移
			++count;
			for (int j = i + 1; j < length - count;sect[j]=sect[j+1], ++j);//不能跳到j=3因为这样会将j=4的数据赋予j=3的位置有越界

		}
		
	}
	length = length - count;
}
int main()
{
	section sect[4] =
	{
		1,3,
		10,16,
		8,10,
		15,18
	};
	int length = 4;
	Sort(sect, length);
	Merge(sect, length);
	Output(sect, length);
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:16:03  更:2021-08-31 15:18:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:19:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码