堆排序代码

简介: 堆排序代码
#include<iostream>
#include<cstring>
using namespace std;
int arr[10010];//要排序的数据
int n;//一共有多少数据
void Max_heap(int arr[], int first, int last){
    int par = first;
    int son = par * 2 + 1;
    while(son <= last){
        if(son + 1 <= last && arr[son] < arr[son + 1]){
            son++;
        }
        if(arr[par] > arr[son]){//如果满足,那么就直接返回
            return;
        }else{
            int temp = arr[par];
            arr[par] = arr[son];
            arr[son] = temp;//交换顺序
            par = son;
            son = par * 2 + 1;//再次进入循环
        }
    }
}
void heap_sort(int arr[], int len){
    for(int i = len / 2 - 1;i >= 0;i--){
        //从最后一个非叶子节点开始往回走
        Max_heap(arr, i, len-1);
    }//先排好形成大顶堆
    //下面代码:先将第一个元素和已经排好元素前一位作交换,再进行堆排序
    for(int i = len - 1;i > 0;i--){
        int temp = arr[0];
        arr[0] = arr[i];
        arr[i] = temp;
        Max_heap(arr, 0, i - 1);
    }
}
int main(){
    cin>>n;
    for(int i = 0;i < n;i++){
        cin>>arr[i];
    }
    heap_sort(arr, n);
    for(int i = 0;i < n;i++){
        cout<<arr[i]<<" ";
    }cout<<endl;
    return 0;
}
相关文章
|
存储 Serverless
MATLAB实战 | 梯形积分法
在科学实验和工程应用中,函数关系往往是不知道的,只有实验测定的一组样本点和样本值,这时就无法使用integral函数计算其定积分。
770 1
|
存储 人工智能 自然语言处理
自动化酒店行业
自动化酒店行业
142 3
|
API 开发者
Netty运行原理问题之Netty实现低开发门槛的问题如何解决
Netty运行原理问题之Netty实现低开发门槛的问题如何解决
|
机器学习/深度学习 算法
【文献学习】Channel Estimation Method Based on Transformer in High Dynamic Environment
一种基于CNN和Transformer的信道估计方法,用于在高度动态环境中跟踪信道变化特征,并通过实验结果展示了其相比传统方法的性能提升。
264 0
|
运维 监控 数据可视化
云效流水线 Flow 评测报告
作为运维工程师,我有使用Jenkins和GitLab CI/CD的经验。Flow在新人上手方面表现出色,界面清晰,文档支持良好。产品功能全面,支持多种语言和环境,性能稳定,且具备开放性,能自定义和扩展。虽然在可视化和监控上有改进空间,但相比其他CI/CD工具,Flow在成本、功能和性能上颇具竞争力,适合团队使用。我推荐采用云效流水线Flow提升研发效率和质量。
|
Java
JSP 教程 之 JSP 语法 6
JSP教程简述基础语法,包括注释和输出日期。注释类型有隐藏的JSP注释(&lt;%-- --%&gt;)和HTML注释。示例显示当前日期如&quot;2024-05-18 08:40:07&quot;。语法亮点:JSP表达式&lt;%= %&gt;用于输出,静态代码使用&lt;% %&gt;和&lt;%常量 %\&gt;。属性值内单引号(&#39;)和双引号(&quot;)需转义。
63 1
|
前端开发 Unix 应用服务中间件
程序员必知:【HAVENT原创】nginx配置
程序员必知:【HAVENT原创】nginx配置
89 0
PTA-矩阵转置
该代码实现将输入的3x3矩阵转置并按指定格式输出。输入为9个小于100的整数,用空格分隔,输出转置后的矩阵。示例输入:1 2 3 4 5 6 7 8 9,输出:1 4 7\n2 5 8\n3 6 9。代码使用`map(int,input().split())`读取输入,然后通过for循环按格式打印转置后的矩阵。
168 0
|
JavaScript
Object.defineProperty(js的问题)
Object.defineProperty(js的问题)
107 0