堆排序
来源:互联网 发布:windows phone升级 编辑:程序博客网 时间:2024/06/04 18:08
今天学习堆排序,我建议你先去这个网站https://bajdcc.github.io/html/heap.html看一下堆排序的可视化算法过程在过来看具体代码编程。
#include<iostream>using namespace std;void displayarray(int a[], int n);void HeadSort(int a[], int n);void CreateHead(int a[], int n);void AdjustHead(int a[], int s,int m);int main(){ int a[] = { 67,48,23,81,38,19,52,40 }; int n = sizeof(a) / sizeof(a[0]); cout << "排序前" << endl; displayarray(a, n); //排序 HeadSort(a, n); cout << "排序后" << endl; displayarray(a, n); system("pause"); return 0;}void displayarray(int a[], int n) { for (int i = 0; i < n; i++) { cout << a[i]<<" "; } cout << endl;}//建立大顶堆。void CreateHead(int a[], int n){ for (int i = n/2-1; i >=0;i--) { AdjustHead(a, i, n - 1); }}//调整a[s,m使得其成为一个大顶堆]void AdjustHead(int a[], int s, int m){ int t, j; t = a[s];//根节点暂时保存在t之中。 for ( j = 2*s+1; j <=m; j*=4) { if (j<m&&a[j]<a[j+1]) { j++; } if (t > a[j]) { break; } a[s] = a[j]; s = j; } a[s] = t;}void HeadSort(int a[], int n) { int t; int i; CreateHead(a, n);//创建堆 for (i = n-1; i >0; i--) { t = a[0]; a[0] = a[i]; a[i] = t; cout << "第" << n-i<< "趟排序结果"<<endl; displayarray(a, n); AdjustHead(a, 0, i-1);//将a[0.....i-1]调整为最大堆。 }}
运行结果:
阅读全文
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- Redis安装
- mockito、powermock版本对应关系
- 10.15 loitest 未完
- 从win+ubuntu双系统安装到ubuntu环境配置和美化
- Windows下MySQL导入csv文件ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv opti
- 堆排序
- 内部类
- 洛谷10月月赛R1·浴谷八连测R1·提高组:SAC E#1
- java数据类型
- ActiveMQ五种消息类型生产消费
- 详解大端模式和小端模式
- 提高代码阅读能力的7种方法
- tensorflow中高级函数Experiment,Estimator,EstimatorSpec,DataSet
- C语言中的注释方法