浙江大学数据结构MOOC-课后习题-第九讲-排序1 排序

news2024/11/17 9:26:24

题目汇总
浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024

题目描述
在这里插入图片描述

文章目录

  • 冒泡排序
  • 插入排序
  • 希尔排序
  • 堆排序
  • 归并排序

冒泡排序

在这里插入图片描述

void buble_Sort()
{	
	int A[MAXSIZE];
	int N;

	std::cin >> N;
	for (int i = 0; i < N; i++)
		std::cin >> A[i];

	bool flag = false;
	int temp;
	for (int j = N - 1; j > 0; j--)
	{	
		flag = false;
		for (int i = 0; i < j; i++)
		{
			if (A[i] > A[i + 1])
			{
				temp = A[i];
				A[i] = A[i + 1];
				A[i + 1] = temp;
				flag = true;
			}
		}
		if (flag == false) break;
	}
	for (int i = 0; i < N; i++)
	{
		if (i == 0)
			std::cout << A[i];
		else
			std::cout << ' ' << A[i];
	}
	return;
}

插入排序

在这里插入图片描述

#include <iostream>
#define MAXSIZE 100000

void insertion_Sort()
{	
	/* 初始化 */
	int A[MAXSIZE];
	int N;
	std::cin >> N;
	for (int i = 0; i < N; i++)
		std::cin >> A[i];
	/* 算法 */
	int i, j, temp;
	for (i = 1; i < N; i++)
	{
		temp = A[i];	/* 摸牌 */
		for (j = i; j > 0 && A[j - 1] > temp; j--)
			A[j] = A[j - 1];
		A[j] = temp;
	}

	/* 打印 */
	for (int i = 0; i < N; i++)
	{
		if (i == 0)
			std::cout << A[i];
		else
			std::cout << ' ' << A[i];
	}

}

int main()
{	
	insertion_Sort();
	return 0;
}

希尔排序

在这里插入图片描述

#include <iostream>

#define MAXSIZE 100000

void shell_Sort()
{	
	/* 初始化 */
	int A[MAXSIZE];
	int N;
	std::cin >> N;
	for (int i = 0; i < N; i++)
		std::cin >> A[i];
	
	/* 算法 */
		//Sedgewick序列
	int Sedgewick[] = { 929, 505, 209, 109, 41, 19, 5, 1, 0 };
	int i, j, Si, D, temp;
	/* 选取初始增量 */
	for (Si = 0; Sedgewick[Si] >= N; Si++);
	/* 开始排序 */
	for (D = Sedgewick[Si]; D > 0 ; D = Sedgewick[Si++])/* 增量变动 */
	{	
		/* 插入排序 */
		for (i = D; i < N; i++)/* 从第二堆中开始抽牌 */
		{
			temp = A[i];
			//for (j = i; j >= D && A[j - D] > temp; j -= D)

			for (j = i; j > D && A[j - D] > A[i]; j -= D)
			{
				A[j] = A[j - D];
			}
			A[j] = temp;
		}
	}
	/* 打印 */
	for (i = 0; i < N; i++)
	{
		if (i == 0)
			std::cout << A[i];
		else
			std::cout << ' ' << A[i];
	}

}

int main()
{	
	shell_Sort();
	return 0;
}

堆排序

在这里插入图片描述

#include <iostream>
typedef int ElementType;
#define MAXSIZE 100000

void swap(int A[], int i, int j)
{
	int temp = A[i];
	A[i] = A[j];
	A[j] = temp;
}
void PercDown(int A[], int p, int N)
{/* 将N个元素的数组中以A[p]为根的子堆调整为最大堆 */
	int parent, child;
	int r = A[p]; /* 存放根节点的值 */

	for (parent = p; (parent * 2 + 1) < N; parent = child)
	{
		child = parent * 2 + 1;
		if (child != N - 1 && A[child] < A[child + 1])
			child++;	/* child指向左右孩子中较大者 */
		if (r >= A[child]) break;	/* 找到恰当的位置 */
		else A[parent] = A[child];	
	}
	/* 找到恰当的值,或者遍历完节点了 */
	A[parent] = r;
}


void heap_Sort()
{	
	/* 初始化 */
	int A[MAXSIZE];
	int N;
	std::cin >> N;
	for (int i = 0; i < N; i++)
		std::cin >> A[i];
	
	/* 算法 */
	//建立最大堆
	for(int i = N / 2; i >= 0; i--)
		PercDown(A, i, N);
	/* 删除最大堆堆顶 */
	for (int i = N - 1; i > 0; i--)
	{
		swap(A, 0, i);
		PercDown(A, 0, i);
	}
	/* 打印 */
	for (int i = 0; i < N; i++)
	{
		if (i == 0)
			std::cout << A[i];
		else
			std::cout << ' ' << A[i];
	}

}

int main()
{	
	heap_Sort();
	return 0;
}

归并排序

在这里插入图片描述

#include <cstdlib>
#include <iostream>
typedef int ElementType;
#define MAXSIZE 100000

void Merge(int A[], int tempA[], int L, int R, int rightEnd)
{
	int leftEnd = R - 1;
	int length = rightEnd - L + 1;
	int i = L;
	while (L <= leftEnd && R <= rightEnd)
	{
		if (A[L] < A[R])
			tempA[i++] = A[L++];
		else
			tempA[i++] = A[R++];
	}
	while(L <= leftEnd)
		tempA[i++] = A[L++];
	while(R <= rightEnd)
		tempA[i++] = A[R++];
}

void Merge_pass(int A[], int tempA[], int N, int length)
{	
	int i = 0;
	for (i = 0; i <= N - 2 * length; i += 2 * length)
		Merge(A, tempA, i, i + length, i + 2 * length - 1);
	if (i + length < N)
		Merge(A, tempA, i, i + length, N - 1);
	else
	{
		for (; i < N; i++)
			tempA[i] = A[i];
	}
}


void Mergy_Sort()
{	
	/* 初始化 */
	int A[MAXSIZE];
	int N;
	std::cin >> N;
	for (int i = 0; i < N; i++)
		std::cin >> A[i];
	
	/* 算法 */
	int* tempA = (int*)malloc(N * sizeof(int));
	int length = 1;
	if (tempA != NULL)
	{
		while (length < N)
		{
			Merge_pass(A, tempA, N, length);
			length *= 2;
			Merge_pass(tempA, A, N, length);
			length *= 2;
		}
		free(tempA);
	}
	else std::cout << "ERROR";
	
	/* 打印 */
	for (int i = 0; i < N; i++)
	{
		if (i == 0)
			std::cout << A[i];
		else
			std::cout << ' ' << A[i];
	}

}

int main()
{	
	Mergy_Sort();
	return 0;
}

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

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

相关文章

滑动窗口-java

主要通过单调队列来解决滑动窗口问题&#xff0c;得到滑动窗口中元素的最大值和最小值。 目录 前言 一、滑动窗口 二、算法思路 1.滑动窗口 2.算法思路 3.代码详解 三、代码如下 1.代码如下 2.读入数据 3.代码运行结果 总结 前言 主要通过单调队列来解决滑动窗口问题&#xff…

(免费领源码)java#SSM#mysql第三方物流系统37852-计算机毕业设计项目选题推荐

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

EasyCode生成的SQL语句中无逗号分隔

EasyCode生成的SQL语句中无逗号分隔 EasyCode是一款非常好用的插件&#xff0c;可以帮助我们生成相关的一些代码&#xff0c;但是在生成SQL对应的xml文件之后&#xff0c;发现语句中多个字段之间没有逗号分隔&#xff0c;而是直接连在了一起。接下来&#xff0c;让我们一起去解…

Kubernetes——Kubectl详解

目录 前言 一、陈述式资源管理方法 二、Kubectl命令操作 1.查 1.1kubectl version——查看版本信息 1.2kubectl api-resources——查看资源对象简写 1.3kubectl cluster-info——查看集群信息 1.4配置Kubectl补全 1.5journalctl -u kubelet -f——查看日志 1.6kubec…

C-数据结构-树状存储基本概念

‘’’ 树状存储基本概念 深度&#xff08;层数&#xff09; 度&#xff08;子树个数&#xff09; 叶子 孩子 兄弟 堂兄弟 二叉树&#xff1a; 满二叉树&#xff1a; 完全二叉树&#xff1a; 存储&#xff1a;顺序&#xff0c;链式 树的遍历&#xff1a;按层遍历&#xff0…

Qt for android 串口库使用

简介 由于Qt for android并没有提供android的串口执行方案&#xff0c;基于需要又懒得自己去造轮子&#xff0c; 使用开源的 usb-serial-for-android 库进行串口访问读写。 如果有自己的需要和库不满足的点&#xff0c;可以查看库的底层调用的Android相关API C/C 串口库 对应…

驱动开发:内核MDL读写进程内存

100编程书屋_孔夫子旧书网 MDL内存读写是最常用的一种读写模式,通常需要附加到指定进程空间内然后调用内存拷贝得到对端内存中的数据,在调用结束后再将其空间释放掉,通过这种方式实现内存读写操作,此种模式的读写操作也是最推荐使用的相比于CR3切换来说,此方式更稳定并不会…

Kruskal算法求最小生成树(加边法)

一、算法逻辑 想要轻松形象理解Kruskal算法的算法逻辑&#xff0c;视频肯定比图文好。 小编看过很多求相关的教学视频&#xff0c;这里选出一个我认为最好理解的这一款安利给大家。 因为他不仅讲解细致&#xff0c;而且还配合了动画演示&#xff0c;可以说把一个抽象的东西讲…

【软件设计师】网络安全

1.网络安全基础信息 网络安全的五个基本要素&#xff1a; 机密性&#xff1a;确保信息不暴露给未授权的实体或进程 完整性&#xff1a;只有得到允许的人才能修改数据&#xff0c;并且能判断出数据是否已被修改 可用性&#xff1a;得到授权的实体在需要时可以访问数据&#xff0…

Web安全:文件上传漏洞详解,文件上传漏洞原理、绕过方式和防御方案。

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

【Mac】 CleanMyMac X for mac V4.15.2中文修复版安装教程

软件介绍 CleanMyMac X是一款为Mac设计的优秀软件&#xff0c;旨在帮助用户优化其设备的性能并提供清理和维护功能。以下是 CleanMyMac X的一些主要功能和特点&#xff1a; 1.系统性能优化&#xff1a;软件可以扫描和修复潜在的性能问题&#xff0c;包括无效的登录项、大文件…

【设计模式】创建型-抽象工厂模式

前言 在软件开发领域&#xff0c;设计模式是一种被广泛接受的解决方案&#xff0c;用于解决特定问题并提供可维护和可扩展的代码结构。抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是其中之一&#xff0c;它提供了一种方法来创建一系列相关或相互依赖的对象…

(三)MobaXterm、VSCode、Pycharm ssh连接服务器并使用

背景&#xff1a;根据前两篇文章操作完成后&#xff0c; 手把手教学&#xff0c;一站式安装ubuntu及配置服务器-CSDN博客 手把手教学&#xff0c;一站式教你实现服务器&#xff08;Ubuntu&#xff09;Anaconda多用户共享-CSDN博客 课题组成员每人都有自己的帐号了&#xff0…

上海亚商投顾:沪指震荡反弹 半导体产业链午后爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡反弹&#xff0c;尾盘涨幅扩大至1%&#xff0c;深成指、创业板指同步上行&#xff0c;科创50指数…

实时直播技术革新:视频汇聚管理EasyCVR平台助力景区游览体验全面升级

自年初以来&#xff0c;各地文旅热点不断。“温暖驿站”“背诗免票”“王婆说媒”等等&#xff0c;吸引了不少人奔赴远方。2024年在国人消费意愿榜上&#xff0c;旅游又一次占据榜首的位置&#xff0c;有三分之一以上的人&#xff0c;今年会在旅游方面增加消费。中国旅游的发展…

【已解决】./start-base.sh: line 5: $‘\r‘: command not found

问题&#xff1a;在linux下运行启动服务的脚本&#xff0c;提示很多‘\r’不可用。 原因&#xff1a;windows下编辑的文件&#xff0c;放在linux下运行&#xff0c;文件格式有问题&#xff0c;需要转换。 解决方法&#xff1a; 1、用vim编辑器打开文件 vim 文件名 2、进入…

Matplotlib(可视化)小案例

一.认识&#xff1a; Matplotlib是一个Python 2D绘图库&#xff0c;它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。Matplotlib可用于Python脚本&#xff0c;Python和IPython shell&#xff0c;Jupyter笔记本&#xff0c;Web应用程序服务器和四个图…

K8S-pod资源 探针

一.pod资源限制&#xff1a; 对pod资源限制原因&#xff1a;高并发占用所有的cpu资源、内存资源、会造成雪崩 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小&#xff0c;以及其他类型的资源。 方式&#xff1a; 对pod做…

二叉树的实现(递归实现)

前言&#xff1a;本文讲解通过递归的方式实现二叉树的一些基本接口。 目录 通过左右子树的方式实现二叉树&#xff1a; 二叉树的遍历&#xff1a; 求二叉树结点的个数&#xff1a; 二叉树所有节点的个数&#xff1a; 二叉树叶子节点的个数&#xff1a; 求第k层节点的节点…

学习编程对英语要求高吗?

学习编程并不一定需要高深的英语水平。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 虽然一些编程资源和文档可能…