`
javayestome
  • 浏览: 1063341 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

堆排序(1)

 
阅读更多
Analyzing the course,There are 2 points must to be take care:
1 : max_heapify() cost O(lgn) time,build_heap cost O(n).so we can say that the total runing time is
O(nlgn). But is not a tight bound. CLRS says that we can done it in linear time.
2: n-element heap,the leaps nodes is [n/2]+1,[n/2]+2....n
3: still question 6.3-3


#include<stdio.h>

void swap(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}

void max_heapify(int a[],int i,int a_size)
{
int l=2*i+1;
int r=2*i+2;
int largest;
if(l<=(a_size-1)&&a[i]<a[l])
largest=l;
else
largest=i;
if(r<=(a_size-1)&&a[largest]<a[r])
largest=r;
if(largest!=i){
swap(&a[i],&a[largest]);
max_heapify(a,largest,a_size);
}
}

void build_maxheap(int a[],int size)
{
int i=(size-1)/2;
for(;i>-1;i--){
max_heapify(a,i,size);
}
}

int main()
{
int a[]={3,2,4,5,6,76,87,78,9};
build_maxheap(a,9);
int i;
for(i=0;i<8;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}

分享到:
评论

相关推荐

    堆排序算法源代码

    由于堆排序是原地排序,它不需要额外的存储空间,因此空间复杂度为O(1)。 在实际编程实现中,堆排序通常会用到以下数据结构: - 数组:由于堆可以被看作是一棵完全二叉树,数组可以方便地表示这种结构,数组下标i...

    JavaScript堆排序1

    在实际应用中,堆排序的时间复杂度平均为O(n log2 n),空间复杂度为O(1),因为它是原地排序,不额外占用内存。但是,由于堆排序的过程可能会导致元素的频繁交换,因此它被认为是不稳定的排序算法。这意味着相等的...

    排序算法编程 堆排序 快速排序

    本主题将深入探讨四种常见的排序算法:堆排序、快速排序以及两种未在标题中明确提到但同样重要的排序方法——基数排序和计数排序。 首先,让我们详细了解一下堆排序。堆排序是一种基于比较的排序算法,利用了数据...

    C++实现堆排序

    1、 实现堆排序算法。 2、 理论分析并实验验证堆排序算法的时间复杂度。

    算法设计实验报告堆排序代码

    【堆排序算法详解】 堆排序是一种高效的比较排序算法,其主要思想是利用堆这种数据结构进行数据的排序。堆是一个近似完全二叉树的结构,同时满足堆的性质:即父节点的键值总是大于或等于(在最大堆中)或小于或等于...

    堆排序的c++实现代码

    堆排序的时间复杂度为O(nlogn),空间复杂度为O(1),是原地排序算法,且具有稳定性。在处理大数据量时,堆排序相比于其他O(n^2)的排序算法,如冒泡排序和选择排序,具有更好的性能。但是,由于频繁的交换操作,它的...

    数据结构排序 堆排序

    堆排序的时间复杂度为O(n log n),空间复杂度为O(1)。 大堆定义 大堆是一个完全二叉树,每个父节点的值大于或等于其子节点的值。堆排序使用大堆来对数组进行排序。 堆排序算法 堆排序算法可以分为两个步骤:创建...

    堆排序算法实现堆排序

    堆排序的时间复杂度为O(n log n),空间复杂度为O(1),因为它是在原地排序的,无需额外的存储空间。然而,由于频繁的交换操作,其常数因子相对较大,实际效率可能低于其他O(n log n)的排序算法如快速排序。 五、适用...

    堆排序 里面有关于堆排序的练习台

    1. 设计堆排序的算法,这包括建立最大堆、交换堆顶元素与末尾元素以及调整堆的过程。 2. 应用堆排序对无序数据进行排序,并分析其性能,比如比较平均和最坏情况下的时间效率。 数据输入与输出: 输入数据由多组整数...

    ACM准备模板——堆排序模板

    原地排序的堆排序拥有O(n log n)的时间复杂度,空间复杂度为O(1),这使得它在处理大规模数据时有明显优势。同时,堆排序还支持动态插入和删除操作,这对于需要实时更新数据的竞赛题目尤为适用。 在实际编程中,堆...

    C++堆排序实现算法

    简单的堆排序算法:以定长数组为例,动态数组等可以以此类推

    数据结构堆排序

    堆排序是一种基于比较的排序算法,它的效率高且实现简单。在本文中,我们将深入探讨堆排序的原理,以及如何在实际编程中实现它。 首先,我们要理解什么是堆。堆是一种特殊的树形数据结构,每个节点都有一个值,并且...

    堆排序算法详细配图讲解

    堆排序是一种基于比较的排序算法,它利用了完全二叉树的数据结构特性,通过堆的性质进行元素的排序。在堆排序中,堆被定义为满足以下性质的完全二叉树:对于每个非叶子节点,其值大于或等于(在大根堆中)或小于或...

    学生成绩管理中实现堆排序

    在这个名为“学生成绩管理中实现堆排序”的项目中,我们看到一个C++编写的学生成绩管理系统,它使用了堆排序方法来管理并排序学生的成绩。 首先,让我们详细了解一下堆。堆通常是一个完全二叉树,可以分为最大堆和...

    堆排序C语言实现

    通过这些步骤,我们可以用C语言实现一个高效的堆排序算法,该算法的时间复杂度为O(n log n),空间复杂度为O(1),是一种原地排序算法,非常适合处理大量数据。在"chapter6"这个文件夹中,可能包含了详细的代码示例和...

    堆排序 减治法——C++代码

    堆排序是一种基于比较的排序算法,它利用了数据结构中的“堆”这一概念。在计算机科学中,堆通常被理解为一个完全二叉树,其中每个父节点的值都大于或等于(大顶堆)或小于或等于(小顶堆)其子节点的值。堆排序算法...

    C++语言的算法实现包括插入排序冒泡排序堆排序快速排序

    本文将深入探讨四种在C++中实现的常见排序算法:插入排序、冒泡排序、堆排序和快速排序。这些算法各有特点,适用于不同的场景,理解并掌握它们对于提升编程能力至关重要。 1. **插入排序**: 插入排序是一种简单的...

    堆与堆排序.ppt

    堆排序的时间复杂度为O(n log n),空间复杂度为O(1)。堆排序是稳定的排序算法,适用于大规模数据的排序。 堆的应用:堆的应用非常广泛,例如: 1. 排序算法:堆排序是一种常用的排序算法。 2. 优先队列:堆可以...

    堆排序算法实例

    堆排序是一种基于比较的排序算法,它通过构造一个近似完全二叉树的堆数据结构来实现排序。在计算机科学中,堆是一个可以被看作是一棵树形结构的数据集合,其中每个父节点的值都大于或等于其子节点的值(大顶堆)或...

    堆排序5.cpp 使用C++实现的堆排序

    堆排序5.cpp 使用C++实现的堆排序堆排序5.cpp 使用C++实现的堆排序堆排序5.cpp 使用C++实现的堆排序堆排序5.cpp 使用C++实现的堆排序堆排序5.cpp 使用C++实现的堆排序堆排序5.cpp 使用C++实现的堆排序堆排序5.cpp ...

Global site tag (gtag.js) - Google Analytics