先把代码贴上来先,网友们如果发现有啥错误,直说哈。至于原理,会跟另一个版本的一起贴上来。
/*-------exchange----------
函数名 :exchange;
功能 : 进行两个的交换;
参数 : 进行比较的两个数的指针;
返回值 : 为空;
-------------------------*/
void exchange(int *a, int *b)
{
int t;
t = *a;
*a = *b;
*b = t;
}
/*-------part_sort----------
函数名 :part_sort;
功能 : 对无序区进行一次堆排序---相当于建堆;
参数 : 无序区的长度int n, 待排序的数组int *a;
返回值 : 为空;
-------------------------*/
int part_sort(int n, int *a) //进行一次堆排序
{
int temp, t, i;
for( i = n / 2; i >= 1; i--)
{
temp = 2 * i;
if(temp <= (n-1) && a[temp] < a[temp+1])
{
temp++;
}
if(a[i] < a[temp])
{
exchange(&a[i], &a[temp]);
}
}
}
/*-------heapsort----------
函数名 :heapsort;
功能 : 堆排序的主体函数,实现排序,进行递归;
参数 : 待排序的数组int *a, 无序区的长度 int n;
返回值 : 整型int ;
-------------------------*/
int heapsort(int *a, int n) // n 并非 数组的总长度, 是无序区的长度;<BR>{
int temp;
if(n == 1)
{
return 0;
}
part_sort(n, a); // 对a[1]....a[n].进行一次堆排序;
exchange(&a[1] , &a[n]); //将堆顶a[1] 与 无序区的 最后一个元素 也就是a[n]进行交换
heapsort(a, n-1);//将 a[n] 归入有序区, 无序区变为a[1].......a[n-1].进行递归;
return 1;
}
分享到:
相关推荐
堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法...
堆排序----堆与堆排序10-从堆的定义可以看出,堆实质是满足如下性质的完全二叉树:二叉树中任一非叶子结点均小于(大于)它的孩子结点
在实际应用中,快速排序的平均情况是最快的,但是堆排序的最坏情况是 O(nlogn) 的,这说明堆排序的时间复杂度是渐进最优的。但是,快速排序的实际执行时间却比堆排序更快,这是因为快速排序的 cache freundliness 比...
堆排序--大顶堆排序 大顶堆排序是堆排序的一种,通过构建大顶堆来实现排序的过程。下面是对大顶堆排序的详细解释: 什么是大顶堆? 大顶堆是一种特殊的完全二叉树,它满足以下条件: * 对于每个非叶子节点,节点...
堆排序-flash演示 可自己输入数据............
c语言实现堆排序。代码实现的是建立大根堆
Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...
堆排序是一种基于比较的排序算法,它利用了数据结构中的“堆”这一概念。在计算机科学中,堆通常被理解为一个完全二叉树,其中每个父节点的值都大于或等于(最大堆)或小于或等于(最小堆)其子节点的值。堆排序分为...
常用的排序算法--堆排序,通过创建堆的方法进行排序
堆排序是一种基于比较的排序算法,它利用了数据结构中的“堆”这一概念。在计算机科学中,堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。堆排序有两种...
各种排序算法,包括希尔算法,快速排序,堆排序-A variety of sorting algorithms, including the Hill algorithm, quick sort, heap sort
8. 堆排序(Heap Sort):堆排序利用了堆这种数据结构,构建一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,调整堆,再将末尾元素移除,重复这个过程。时间复杂度为O(n log n)。 这些排序算法的Swift实现提供...
堆排序是一种基于比较的排序算法,它利用了堆这种数据结构的特性来达到排序的目的。在C#中,我们可以按照上述描述的四个步骤来实现堆排序。以下是详细的知识点解析: 1. **建立大根堆**: 大根堆是二叉堆的一种...
快速排序和堆排序是两种非常重要的内部排序算法,在计算机科学中有着广泛的应用。它们都是基于比较的排序方法,但各自有着独特的实现策略和性能特点。 快速排序由C.A.R. Hoare在1960年提出,其核心思想是分治法。...
堆排序是一种基于比较的排序算法,它通过构建和维护一个最大堆或最小堆来实现排序。在C语言中,我们可以自定义函数来实现这个过程。下面是对标题和描述中涉及的堆排序知识点的详细说明: 1. **最大堆**:在堆排序中...
堆排序是一种基于比较的排序算法,它通过构建一个大顶堆或小顶堆来实现排序。在计算机科学中,堆通常被理解为一种特殊的树形数据结构,满足堆的性质:父节点的值总是大于或等于(对于大顶堆)或小于或等于(对于小...
堆排序是一种基于比较的排序算法,它通过构造一个大顶堆或小顶堆来实现排序。在本场景中,我们关注的是堆排序的源代码,它适用于openSUSE 11.4操作系统,并且是使用GCC version 4.5.1编译器编译的。在这个名为"sort...
Python 堆排序 堆排序 堆排序 堆排序 堆排序
堆排序是将n个关键字序列L[1...n]称为堆,堆的初始化是将L[1...n]视为一棵完全二叉树的顺序存储结构。基数排序是借助“分配”和“收集”两种操作对单逻辑关键字进行排序,分为最高位优先(MSD)和最低位优先(LSD)。...
堆排序