选择排序法——堆排序

ops/2024/11/14 5:15:15/

任务描述
本关任务:完成建堆、排序调整及输出排序结果的函数。

相关知识
为了既要保存中间比较结果,减少后面的比较次数,又不占用大量的附加存储空间,使选择排序算法具有较好的性能,Willioms和Floyd在1964年提出的称为堆排序的算法实现了这一想法。 

堆排序包括以下关键部分:
1.建初始堆;
2.输出堆顶元素后,调整堆。
重复2,直到排序完成。

若需要对数据进行从小到大的递增排序,则应建立大顶(根)堆。

#include <stdio.h>
#define MAXSIZE 100void print(int a[], int n) {for (int i = 1; i <= n; i++) {printf("%d ", a[i]);}printf("\n");
}void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}void heapify(int a[], int n, int i) {int largest = i;int left = 2 * i;int right = 2 * i + 1;if (left <= n && a[left] > a[largest])largest = left;if (right <= n && a[right] > a[largest])largest = right;if (largest != i) {swap(&a[i], &a[largest]);heapify(a, n, largest);}
}void heapSort(int a[], int n) {// Build heap (rearrange array)for (int i = n / 2; i >= 1; i--)heapify(a, n, i);// One by one extract an element from heapfor (int i = n; i >= 1; i--) {// Move current root to endswap(&a[1], &a[i]);// call max heapify on the reduced heapheapify(a, i - 1, 1);}
}int main(void) {int num;scanf("%d", &num);int data[MAXSIZE];for (int i = 1; i <= num; i++) {scanf("%d", &data[i]);}heapSort(data, num);print(data, num); // 输出排序后的数组return 0;
}


http://www.ppmy.cn/ops/133467.html

相关文章

PostgreSQL 日志文件备份

随着信息安全的建设&#xff0c;在三级等保要求中&#xff0c;要求日志至少保留半年 180 天以上。那么 PostgreSQL 如何实现这一要求呢。 我们需要配置一个定时任务&#xff0c;定时的将数据库日志 log 下的文件按照生成的规则将超过一定时间的日志拷贝到其它的路径下&#xf…

HTML之图片和超链接的学习记录

图片 在HTML中&#xff0c;我们可以使用img标签来显示一张图片。对于img标签&#xff0c;我们只需要掌握它的三个属性&#xff1a;src、alt和title。 <img src"" alt"" title"" /> src用于指定图片所在的路径&#xff0c;这个路径可以是…

django博客项目实现站内搜索功能

Django博客站内搜索功能实现 1. 准备工作 确保Django项目已经创建好&#xff0c;并且有一个用于存储博客文章的模型&#xff08;例如Post&#xff09;。 2. 定义搜索表单 在应用目录下创建一个forms.py文件&#xff0c;定义一个搜索表单。 from django import formsclass …

python入门3

IDE的概念 IDE(Integrated Development Environment)又被称为集成开发环境。说白了&#xff0c;就是有一款图形化界面的软件&#xff0c;它集成了编辑代码&#xff0c;编译代码&#xff0c;分析代码&#xff0c;执行代码以及调试代码等功能。在我们Python开发中&#xff0c;最常…

OpenCV库中卡尔曼滤波库的使用

在C的OpenCV库中含有卡尔曼滤波库可以方便了帮我们处理麻烦的数学运算&#xff0c;下面是具体的使用方法&#xff1a; OpenCV库的使用 cv::KalmanFilter kf(6, 2, 0); 构造类&#xff0c;参数依次为状态的维度&#xff0c;观测值的维度&#xff0c;与改变系统的输入值的维度。…

ReactPress:重塑内容管理的未来

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议&#xff0c;欢迎一起共建&#xff0c;感谢Star。 ReactPress&#xff1a;重塑内容管理的未来 在当今信息爆炸的时代&#xff0c;一个高效、易用的内容管理系统&#xff0…

基于SSM(Spring + Spring MVC + MyBatis)框架的文物管理系统

基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的文物管理系统是一个综合性的Web应用程序&#xff0c;用于管理和保护文物资源。下面我将提供一个详细的案例程序概述&#xff0c;包括主要的功能模块和技术栈介绍。 项目概述 功能需求 用户管理&#xff1a…

Nginx 部署负载均衡服务全解析

目录 前言Nginx 简介负载均衡的基本概念Nginx 负载均衡的工作原理Nginx 负载均衡的配置 基本配置轮询策略最少连接策略哈希策略权重配置会话保持健康检查 Nginx 负载均衡的高级配置 反向代理静态内容缓存SSL/TLS 配置日志记录 Nginx 负载均衡的实战案例 环境准备配置文件详解测…