您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页C++堆排序以及用堆排序解决topk问题

C++堆排序以及用堆排序解决topk问题

来源:华佗小知识
C++堆排序以及⽤堆排序解决topk问题

void siftdown(vector& nums, int e, int begin, int end){ int i = begin;

int j = 2*begin + 1; while(jif(j+1 < end && nums[j+1] > nums[j]){ j++; }

if(e > nums[j]){ break; }

nums[i] = nums[j]; i = j;

j = 2*i + 1; }

nums[i] = e;}

void heap_sort(vector& nums){ auto end = (int)nums.size(); for(auto k = end/2; k>=0;k--){

siftdown(nums, nums[k], k, end); auto n = nums; int i = 0; }

for(int k = end - 1;k>0;k--){ int e = nums[k]; nums[k] = nums[0]; siftdown(nums, e, 0, k); }}

int heap_sort_topk(vector& nums, int topk){ auto len = (int)nums.size(); if(topk > len){ return 0; }

for ( int k = (len/2); k > 0; k-- ){

sift_down(nums, nums[k], k, len); }

for( int k = len -1; k > 0; k--){ if ( topk < 0){

return nums[0]; }

sift_down(nums, nums[k], 0, k); topk--; }}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务