【day-11】寻找前K大个数-堆排序
来源:互联网 发布:数据库注释注入防护 编辑:程序博客网 时间:2024/06/04 17:58
#include<iostream>using namespace std;/*构建一个小顶堆*/void heapRebuild(int arr[],int size,int root){ int leftChild=2*root+1; int minChild=leftChild; if(leftChild<=size-1) { int rightChild=leftChild+1; if(rightChild<=size-1 && arr[rightChild]<arr[leftChild]) minChild=rightChild; if(arr[root]>arr[minChild]){ swap(arr[root],arr[minChild]); heapRebuild(arr,size,minChild); } }}/*堆排序*/void heapSort(int arr[],int size){ for(int i=size/2-1;i>=0;i--) { heapRebuild(arr,size,i); } for(int last=size-1;last>0;last--){ swap(arr[0],arr[last]); heapRebuild(arr,last,0); }}/*用堆排序的思想,寻找前K大个数*/void FindKMAx(int arr[],int size, int k){ for(int i=k/2-1;i>=0;i--) { heapRebuild(arr,k,i); } for(int j=k;j<size;j++){ if(arr[j]>arr[0]) { swap(arr[0],arr[j]); heapRebuild(arr,k,0); } }}int main(){ int arr[]={1,2,3,10,8,4,5,6,7}; int size=sizeof(arr)/sizeof(arr[0]); for(int i=0; i<size; i++) { cout<<" "<<arr[i]; } int k=5; FindKMAx(arr,size,5); cout<<endl<<"Top"<<k<<":"<<endl; for(int i=0; i<k; i++) { cout<<" "<<arr[i]; }}
1 0
- 【day-11】寻找前K大个数-堆排序
- 【day-10】寻找前K大个数-快排
- 寻找数组中前K个最小的数(Kth smallest element)---(堆排序的应用)
- 寻找前k大的数
- 寻找前k大的数
- 海量数据中找第k大个数
- ZCMU-1540-第K大个数
- 寻找前K大数(复习各种排序)
- 输入n个数,输出第k大个数
- 寻找前K大数
- 堆排序中求前K个最小数
- 用堆排序寻找数组中最大的K个数
- python numpy 部分排序 寻找最大的前几个数
- 利用堆排序得到前K小元素
- 代码 -- 堆排序 解决大数组找前K大。
- 【day-17】快排寻找第K小的数,简化版本
- 寻找最小的k个数(先快速排序,然后输出前k个元素)
- 寻找前k个最小元素——用最小堆实现…
- http 500状态码
- Spring注解配置说明(不定时更新)
- 2017sdut省赛选拔(1)--poj1631-(nlogn的最长上升子序列)
- Online Caisno Malaysia iBET Live Casino Rebate 0.75% Unlimited(iBET Live Casino, Live Casino Rebate,
- 第十一章 Shell 的变量功能
- 【day-11】寻找前K大个数-堆排序
- 设计模式之命令模式
- mysql insert into replace into insert ignore into 用法
- MySQL开启慢查询日志slow_query_log
- Linux中常用软件安装(基于Ubuntu)
- mysql infile/outfile 导入导出
- TOMCAT 目录结构
- 第十一章 命令别名与历史命令
- 计算机中缺失MSVCR110.dll,MSVCP120D.dll等问题解决