堆排序的小例子,可以参考一下
#include <stdio.h>
int parent(int i)
{
return i/2;
}
int left_child(int i)
{
return 2*i;
}
int right_child(int i)
{
return 2*i+1;
}
//n the range needed to sort
void build_max_heap(int A[], int i, int n) // 数组A中,除A[i]外,其它元素是大顶堆
{
int max = i, temp;
if (i<0 || n<1 || i>=n)
return ;
/* find max element among a[i] a[left_child] a[right_child] */
if (left_child(i)<n && A[max]<A[left_child(i)])
max = left_child(i);
if (right_child(i)<n && A[max]<A[right_child(i)])
max = right_child(i);
// exchange a[i], a[max]
if (i!=max)
{
temp = A[i];
A[i] = A[max];
A[max] = temp;
build_max_heap(A, max, n);
}
return;
}
void max_heap_sort(int A[], int n)
{
int temp;
// exchange A[0] A[n-1]
if (n==1)
return ;
temp = A[0];
A[0] = A[n-1];
A[n-1] = temp;
build_max_heap(A, 0, n-1);
max_heap_sort(A, n-1);
}
int main()
{
int A[10] = {5,8,9,52,47,65,3,45,26,81};
int i, n = 10;
for (i=(n-1)/2; i>=0; i--)
{
build_max_heap(A, i, n);
}
max_heap_sort(A, n);
for (i=0; i<n; i++)
{
printf("%d ", A[i]);
}
printf("\n");
system("pause");
return 0;
}
分享到:
相关推荐
/*1.编写完整的堆排序程序*/ /*1.编写完整的堆排序程序*/
7大排序算法(快速排序,冒泡排序,选择排序,归并排序,插入排序,希尔排序,堆排序)实现源码
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
(1) 完成5种常用内部排序算法的演示,5种排序算法为:快速排序,直接插入排序,选择排序,堆排序,希尔排序; (2) 待排序元素为整数,排序序列存储在数据文件中,要求排序元素不少于30个; (3) 演示程序开始,...
这是一个用C++编写的简单学生成绩管理系统,其中实现学生成绩的最大最小堆排序,程序已经过测试!
以下问题要求统一在一个大程序里解决。 21、折半插入排序 22、21、折半插入排序 22、冒泡排序 21、折半插入排序 22、冒泡排序 23、快速排序 21、折半插入排序 22、冒泡排序 23、快速排序 24、简单选择排序 21、折半...
内含福州大学汇编实践练习(倪**班) 作业一:3个简单编程 作业二:4个完美数与正整数素数分解 作业三:冒泡排序,插入排序,快速排序 作业四:九九乘法表,堆排序,八皇后 作业五:走迷宫
10种排序算法代码+综合比较代码(直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、折半插入排序、2路插入排序),其中不仅有各种排序算法的代码,还包含10种代码在关键字...
冒泡排序,选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序源码实现,里面有详细讲解,对新手应该有帮助
常见的几种排序方式,包括选择排序,冒泡排序,快速排序,希尔排序,堆排序,插入排序。vs2008实现,对话框方式,主要实现字符串的由小到大排序。点击“几种排序方法.vcproj“运行。字符集使用多字节集,不能用...
很简单的垒堆排序,这个代码比较简单,可以根据你输入的任意序列进行排序!
这个是整理好了的,各种排序方式,喜欢的同学可以看下,对于初学的人很有帮助
(1) 对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。 (2) 待排序的表长不小于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作为...
试通过随机数据比较堆排序、直接插入排序算法的关键字比较次数和关键字移动次数。 (1)待排序表的表长不小于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加...
本程序实现各种排序算法并分析与比较 直接插入排序, SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序,归并排序
大学课程、数据结构、C代码、 以下问题要求统一在一个大程序里解决。 1折半插入排序 2冒泡排序 3快速排序 4简单选择排序 5归并排序 6堆排序
该程序包含严蔚敏数据结构课程中的各种排序算法(各种排序算法以独立函数的方式给出,可自行调用),包括直接插入排序、二分插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序。
把待排序的数组构造出最大堆是进行堆排序操作的基本方法,这里将带大家来解读堆排序算法及用C++实现基于最大堆的堆排序示例,首先从堆排序的概念开始:
数据结构报告c++,简单选择排序,冒牌排序,插入排序,快速排序,两路合并排序,堆排序,几种排序方法的比较,有详细的源代码和实验报告
第四章 简单排序(C++)_PDF(2020.06.10).rar