八种排序方法(六)——堆排序
来源:互联网 发布:mac编辑图片怎么保存 编辑:程序博客网 时间:2024/05/17 23:06
编译器:Xcode
编程语言:C++
源程序:
#include <iostream>using namespace std;void swap(int a[],int i,int j) //交换函数{ int temp; temp=a[i]; a[i]=a[j]; a[j]=temp;}void heapAdjust(int a[],int i,int n){ int temp; //假设第一个结点的元素是最大的 temp=a[i]; //i结点:2*i是i结点的左结点,2*i+1是结点的右结点 //把结点元素大的交换到前面 for(int j=2*i;j<=n;j*=2) { if(j<n && a[j]<a[j+1]) j++; if(temp>=a[j]) break; a[i]=a[j]; i=j; } a[i]=temp;}//堆排序将数组先组成二叉树,默认从数组的a[1]开始排,a[0]是无效数据void heapSort(int a[],int n) //堆排序{ int i; //先将数组组成一棵完全二叉树 //从2/n开始,就是从倒数第二排结点往前开始 for(int i=n/2;i>0;i--) { heapAdjust(a, i, n); } //循环每个结点,将大的结点交换到堆顶 for(i=n;i>1;i--) { swap(a,1,i); //每次交换完都要调整二叉树,将剩下的最大结点交换到堆顶 heapAdjust(a, 1, i-1); }}int main(){ int a[11] = {-1,43, 65, 4, 23, 6, 98, 2, 65, 7, 79}; cout<<"堆排序:"<<endl; heapSort(a, 10); for(int i=1;i<11;i++) cout<<a[i]<<" "; cout<<endl; return 0;}
运行结果:
堆排序:2 4 6 7 23 43 65 65 79 98 Program ended with exit code: 0
阅读全文
0 0
- 八种排序方法(六)——堆排序
- 基本排序方法之六——堆排序
- 复习数据结构:排序算法(六)——堆排序
- 排序算法(六)——堆排序
- 算法——排序(六)堆排序
- 八种排序方法(一)——选择排序
- 八种排序方法(二)——冒泡排序
- 八种排序方法(三)——插入排序
- 八种排序方法(四)——快速排序
- 八种排序方法(五)——希尔排序
- 八种排序方法(七)——归并排序
- 八种排序方法(八)——基数排序
- 排序(六)-堆排序
- 排序六 堆排序
- 基础算法系列(六)——堆排序
- 排序算法(六):堆排序
- 排序算法(六) 堆排序
- 排序算法八:堆排序
- codeforces 160A Twins
- 输入n个数,最坏情况下用 n + logn
- 事件委托
- 计算火车运行时间(c语言)
- 北大oj&派&浮点数二分
- 八种排序方法(六)——堆排序
- 培训第十天 部分关键字及内部类
- java List实体排序
- C语言跳转语句
- 获取本地歌曲信息的方法
- leetcode 538. Convert BST to Greater Tree 后序遍历的一个应用
- RDD常用操作
- Base64是什么
- pthon6个必要库