首页 > 其他分享 >堆排序

堆排序

时间:2022-12-02 20:14:08浏览次数:34  
标签:cout int 堆排序 len down --

输入一个长度为 n 的整数数列,从小到大输出前 m 小的数。

#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int n, m, len;
int h[N];

void down (int u) {
    int t = u;
    int l = u * 2, r = u * 2 + 1;
    if (l <= len && h[l] <= h[t]) t = l;
    if (r <= len && h[r] <= h[t]) t = r;
    if (t != u) {
        swap (h[t], h[u]);
        down (t);
    }
}

int main() {
    cin >> n >> m;
    len = n;
    for (int i = 1; i <= n; i++) cin >> h[i];
    
    for (int i = n / 2; i; i--) down (i);
    
    while (m--) {
        cout << h[1] << " ";
        h[1] = h[len--];
        down (1);
    }
    return 0;
}

  

标签:cout,int,堆排序,len,down,--
From: https://www.cnblogs.com/leetothemoon/p/16945498.html

相关文章

  • 与堆和堆排序相关的问题
    与堆和堆排序相关的问题作者:Grey原文地址:博客园:与堆和堆排序相关的问题CSDN:与堆和堆排序相关的问题堆结构说明堆结构就是用数组实现的完全二叉树结构,什么是完全二叉......
  • 堆排序算法
    堆排序算法堆排序定义:堆排序是将一组无序数组(二叉树)构建成一个堆,分为大顶堆和小顶堆大顶堆:父节点的值永远大于其左子树和右子树的值堆排序思路:将堆顶元素与末尾元......
  • 堆排序+TOPK问题
    (文章目录)一.堆排序1.使用向上还是向下调整建堆好?(1)向上调整算法建堆的时间复杂度voidadjustup(HPDatatype*a,intchild)//向上调整算法{ intparent=(child-......
  • [排序算法] 堆排序 (C++)
    堆排序解释什么是堆堆heap是一种近似完全二叉树的数据结构,其满足一下两个性质1.堆中某个结点的值总是不大于(或不小于)其父结点的值;2.堆总是一棵完全二叉树将根......
  • 堆排序用法
    因为堆结构只保证根节点比双子节点都大或小1  求最小的n个数:   构建n个数的大顶堆,依次弹出堆顶再往下调整(用例省略)2  求最大的n个数:   构建n个数的......
  • 堆排序优化版Dijkstra
    Dijkstra依旧基于贪心用堆排序动态维护剩余点中dist[]最小的点堆排序优化Dijkstra算法 稀疏图,用邻接表,稠密也可以 void add(int a,int b,int c){    e[i......
  • 堆排序的基本知识
    堆的性质分为大根堆和小根堆,性质为结点的左右孩子大于或小于根节点(1)堆是一颗完全二叉树;(2)小(大)顶堆中的每一个节点都不小于(不大于)它的父节点;(3)堆的插入、删除......
  • js-基础排序实现(冒泡排序,快速排序,选择排序,插入排序,希尔排序,归并排序,堆排序)
    冒泡排序:两个指针循环,遇到不合适就交换,直到将符合要求的浮到边界functionbubbleSort(list){ for(leti=0;i<list.length;i++){ for(letj=0;j<list.length-i-1;j++)......
  • 快速排序-归并排序-堆排序
    十大排序动图快速排序优化数组取标pivot,将小的元素放在pivot左边,大元素在右侧,然后依次对右边的子数组继续快排,以达到整个序列有序publicclassQuickSort{public......
  • 数据结构【c语言版】八大算法(上)图文详解带你快速掌握——希尔排序,堆排序,插入排序,选择
    数据结构之八大算法详解(1)——希尔排序,堆排序,插入排序,选择排序,冒泡排序!插入排序基本思想把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所......