堆排序算法实现(C++)

堆排序算法及C语言实现 阅读详情
/*
 * main.cpp
 *
 *  Created on: 2012-3-16
 *      Author: csc
 */
#include <iostream>

using namespace std;


int a[] = {49,38,65,97,76,13,27,50};

void FixTree(int a[], int i)
{
    cout<<"i: "<<i<<endl;
    int j = (i-1)/2;
    int temp =a[i];
    while(j >= 0)
    {
        if(a[j] > a[i])
            break;
        temp = a[i];
        a[i] = a[j];
        a[j] = temp;
        i = j;
        if(j == 0)
            break;
        j = (j-1)/2;
    }
}


void delete_elem_tree(int a[],int i, int n)
{
    int temp = a[0];
     i = 0;
    int j = 2*i +1;
    while(j<n)
    {
        if(j+1<n &&a[j+1]>a[j])
            j++;
        if(a[j]<temp)
            break;
        a[i] = a[j];
        i = j;
        j = 2*j+1;
    }
    a[i] = temp;
}


void insertTree(int a[], int n, int value)
{
    a[n] = value;
    FixTree(a, n);
}




int main(void) {

    for(int i=1; i<8; i++)
    {
        insertTree(a, i, a[i]);
    }


    for(int i =0; i<8; i++)
        cout<<a[i]<<" ";
            cout<<endl;
            a[0] = a[7];
     delete_elem_tree(a,0, 7);
     for(int i = 0; i<7; i++)
         cout<<a[i]<<" ";
     cout<<endl;
}


实现堆排序算法 堆排序是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。 /** *    实验题目: *        实现堆排序算法 *    实验目的: *      ... 阅读详情

相关推荐

C语言试题179之实现堆排序算法

题目: 实现堆排序算法概念及其介绍 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似 完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。适用说明 我们之前构造堆的过程是一个个数据调用 insert 方法使用 shift up 逐个插入到堆中,这个算法的时候时间复杂度是 O(nlogn),本小节介绍的一种构造堆排序的过程,称为 Heapify,算法时间复杂度为 O(n)。过程图示 完全二叉树有个重要性质,对于第一个非叶子节点的索引是

码莎拉蒂 2623

堆排序(c++

【代码】堆排序(c++

2303_76711142的博客 723

飞腾X100芯片GPU状态查询

本文档对在linux系统下查看X100芯片GPU状态信息进行说明,可以帮助大家了解芯片的实时工作状态。

乌拉大喵喵 2814

堆排序——C++实现

c++代码:#include<bits/stdc++.h> using namespace std;const int maxn = 10; int a[maxn];void heap_adjust(int a[], int k, int n){ int tmp=a[k]; for(int i=k*2; i<=n; i*=2){ if(i<n&&a[i]<a[i+1

Lin's Blog 445

CMIP6数据处理及在气候变化、水文、生态等领域中的应用

CMIP6、Biome-BGC、生态、气候变化、气象、水文、气候模式、植被、生态模式、遥感、极端气候、降水、WRF模式、动力降尺度、RCM、大气环流模型、贝叶斯模型、、降尺度

PhyliciaFelicia的博客 1547

Bellhop海底地形仿真入门:从MATLAB数据导入到3D可视化(附避坑指南)

本文详细介绍了Bellhop海底地形仿真的完整工作流程,从MATLAB数据导入、清洗与坐标转换,到构建.bty输入文件,再到生成高质量3D可视化结果。文章重点解析了数据格式、深度值正负、单位统一及坐标投影等关键环节的避坑指南,并提供了可复用的代码片段,帮助用户高效完成从原始数据到仿真成果的转换。

weixin_29275257的博客 194

堆排序如果用C++如何实现

堆排序的思想讲了很多了,我在这里不赘述,我这里直接上代码,外加上输入输出用例,适合笔试时通过。 #include<iostream> #include<vector> using namespace std; //这个函数作用是构建大顶堆(arr是输入的数组,len是arr的长度,id是第一个非叶子节点的下标) void adjust(vector<int>&arr,int len,int id) { int left=2*id+1; //id的左节点的下标

qq_36243414的博客 233

可信数据空间关键技术和功能架构研究

可信数据空间(TDS)是实现数据安全共享的基础设施,通过数字合约和使用控制技术确保数据跨域流通的可信与安全。其架构包括服务平台和接入连接器,关键技术涵盖访问控制、隐私计算、区块链等。评估重点在于合规性、连接器能力、互联互通及安全体系。核心在于构建规则引擎而非简单数据汇聚,连接器开发比平台建设更重要。当前面临技术成本博弈、跨域身份互认等挑战,需平衡安全、性能与成本,推动数据要素市场发展。

逸尘的专栏 2222

C++版本堆排序

堆是一种特殊的完全二叉树。 大顶堆:每个节点的值都大于或等于其左右孩子节点的值的完全二叉树 小顶堆:每个节点的值都小于或等于其左右孩子节点的值的完全二叉树 总体思想:将待排序的序列构造成一个大顶堆。此时整个序列的最大值就是对顶的根节点。将他和堆的末尾元素交换,再将剩余的n-1个元素构成新的大顶堆,在得到整个序列的第二大的元素,如此反复执行就会得到一个有序的序列了。 注意:这里使用的是层序遍历法:

lzjsqn的专栏 773

DDS(Direct Digital Synthesizer)数字频率合成器

随着数字技术在仪器仪表和通信系统中的广泛使用,可从参考频率源产生多个频率的数 字控制方法诞生了,即直接数字频率合成(DDS)。 直接数字合成(DDS)是一种产生模拟波形(通常是正弦波)的方法,它通过产生数字形式的时变信号,然后进行数模转换。由于DDS设备内的操作主要是数字的,它可以提供输出频率之间的快速切换,良好的频率分辨率,并在广泛的频率频谱上操作。随着设计和工艺技术的进步,今天的DDS设备非常紧凑,功耗很小。 上面是比较书面的语言,其实简单地说就是一个信号发生器模块,主要是产生频率可调的三角波正弦波。

denghuajing的博客 4864

js逆向-逆向部分技巧总结

js逆向-逆向部分技巧总结

Deng872347348的博客 2133

排序法系列之六---堆排序(C++代码实现)

#include using namespace std; //return the parent of the ith element int Parent(int i) { return i/2; } //return the left child of the ith element int Left(int i) { return i*2; } //return

小博客 1408

LLM制造业最佳实践:基于大语言模型处理最优化问题,制造业如何更优排产,提升资源利用率

随着制造业数字化转型加速,生产排产优化成为提升企业效率和竞争力的关键环节。大语言模型(LLM)凭借其强大的多模态数据处理、动态优化和智能推理能力,在复杂排产场景中展现出独特优势。谷歌、DeepSeek等机构的研究表明,LLM可通过自然语言交互和生成式决策,突破传统优化算法的局限性。本报告结合半导体行业实践案例与技术路径,系统分析LLM在排产优化中的应用潜力与挑战。

shiter编写程序的艺术 939

堆排序的算法实现(C/C++)

/* 2013年1月4日16:29:29 堆排序,建成大顶堆的形式,然后进行输出或者其他操作 在VC++6.0的运行结果是: --------------------------- 80 35 30 20 17 15 12 10 2 --------------------------- */ # include # define N 10 voi

Acton 1119

Android 13 内置xapk安装包的方法

安装xapk 内置xapk

安卓兼职framework和app工程师的博客 223

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

《算法导论》7、堆排序实现(C++)

做了一点优化,一是使用迭代代替了递归调用,二是使用移位代替了乘法。 #include #include #include using namespace std; void maxHeapify(int* A, int i , int* heapsize ); void heapSort(int* A, int n); void buildMaxHeap(int* A, int n, int

zcy19941015的博客 507

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

算法导论笔记(第六章堆排序实现 C++)

/使用堆排序并将排序好的数组转移。

weixin_73493013的博客 101

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

小根堆实现“优先队列”数据结构及“堆排序”算法(C/C++)

功能介绍: min_heap p;//声明小根堆 p.len;//堆的大小 p.add(x);//将数据x插入堆中 p.del();//删除堆顶元素 p.top();//返回堆顶元素 p.print();//层序遍历顺序输出堆中元素 p.build(a,n);//将数组a[]的前n个元素建立小根堆( 时间复杂度:O(n) ) p.clear();//清空堆中元素 p.psort();//将p中元素...

薛崇祥的博客 1462

【十大经典排序详解_堆排序】

堆排序 堆排序(Heapsort) 是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法: 大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列; 小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列; 堆排序的平均时间复杂度为 Ο(nlogn)。 堆排序1. 算法步骤2.动图演示3.代码 1. 算法步骤

Sugar_wolf的博客 200

堆排序——C语言实现

在实现堆排序之前,我们先讲解一些必备的知识点。 一、什么是堆? 堆的逻辑结构是完全二叉树; 堆的物理结构是一个数组。 二、堆的分类: 大堆:所有的父亲大于等于孩子; 小堆:所有的父亲小于等于孩子。 三、父亲和孩子的下标关系: leftchild=parent×2+1; rightchild=parent×2+2; parent=(child-1)/2。 四、堆能干什么? 大堆能保证堆顶的数最大; 小堆能保证堆顶的数最小; 堆排序也正是利用这一特性进行排序的。

qq_41890240的博客 1万+

【排序算法】四、堆排序(C/C++)

堆排序

枫叶先生的博客 2745

堆排序——c语言实现

文章目录堆的概念堆的定义堆的判断堆的特性堆的构造自底向上构造自顶向下构造关于最大堆,最小堆堆排序堆排序的一般过程堆排序样例过程图解c语言代码 堆的概念 堆的定义 堆可以定义为一颗二叉树,树的节点包含键(每个节点一个键),并且满足下面两个条件: 堆的形状要求是一颗完全二叉树,意识就是说,树的每一层都是满的,除了最后一层最右边的元素可能有缺位 父母优势要求,就是说每一个节点的键都要大于或等于它子女的键。 堆的判断 下面这个就不是堆,因为不是完全二叉树 下面这个也不是堆,堆的节点比子节点大,4比5小 下面

qq_43610614的博客 7560

堆排序原理及其实现(C++)

堆排序原理及其实现(C++)1 堆排序的引入 我们知道`简单选择排序`的时间复杂度为O(n^2),熟悉各种排序算法的朋友都知道,这个时间复杂度是很大的,所以怎样减小简单选择排序的时间复杂度呢?从上文分析中我们知道简单选择排序主要操作是进行关键字的比较,所以怎样减少比较次数就是改进的关键。 简单选择排序中第i趟需要进行`n-i`次比较,如果我们用到前面已排好的序列`a[1...i-1]`是否可以减

极客学长Bravo | 突破信息差 | 副业生财有术 4万+

堆排序(C++)

堆排序(C++)

weixin_44806108的博客 4860

堆/堆排序(C/C++)

本篇文章将会较为全面的介绍堆的概念以及实现堆两个重要算法:向上调整算法和向下调整算法。接着实现了堆排序。

m0_74830524的博客 2045

三叉堆排序算法(C++)

三叉堆排序算法 C++实现三叉堆排序并与传统二叉堆排序进行比较 三叉堆排序 向下调整算法 template<class ElemType> void FilterDown_3(ElemType heapArr[], int low, int high) { int f = low ,i = 3*low + 1; ElemType e = heapArr[low]; while(i <= high ){ if(i <= high - 2){

qq_45632574的博客 695
上一篇: Linux下安装使用mysql connector(C++)
下一篇: Effective C++ 笔记1
csc_csc_csc
博客等级 码龄15年 169粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值