hd1425 sort【堆排序】

sort

Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 27771    Accepted Submission(s): 8400

Problem Description

给你n个整数,请按从大到小的顺序输出其中前m大的数。

Input

每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。

Output

对每组测试数据按从大到小的顺序输出前m大的数。

Sample Input

5 3
3 -35 92 213 -644

Sample Output

213 92 3

知识点:堆、STL
#include <stdio.h>
#include <algorithm>
using namespace std;
int a[1000000];
int main()
{
    int i,n,m;
    while(EOF != scanf("%d %d",&n,&m))
    {
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        make_heap(a,a+n);
        printf("%d",a[0]);
        for(i=1;i<m;i++)
        {
            pop_heap(a,a+n-i+1);
            printf(" %d",a[0]);
        }
        printf("\n");
    }
    return 0;
}

hd1425 sort【堆排序】

时间: 2024-10-08 01:29:32

hd1425 sort【堆排序】的相关文章

Heap Sort (堆排序)

Heap sort is common in written exams. First of all, what is heap? Heap is a kind of data struct that can be seen as a complete binary tree. The object to indicate heap is an array A that have two attributes: length[A] shows the number of elements in

经典排序算法 - 堆排序Heap sort

经典排序算法 - 堆排序Heap sort 堆排序有点小复杂,分成三块 第一块,什么是堆,什么是最大堆 第二块,怎么将堆调整为最大堆,这部分是重点 第三块,堆排序介绍 第一块,什么是堆,什么是最大堆 什么是堆 这里的堆(二叉堆),指得不是堆栈的那个堆,而是一种数据结构. 堆可以视为一棵完全的二叉树,完全二叉树的一个"优秀"的性质是,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示,每一个结点对应数组中的一个元素. 数组与堆之间的关系 二叉堆一般分为两种:最大堆和最小堆. 什么

[Unity][Heap sort]用Unity动态演示堆排序的过程

[Unity][Heap sort]用Unity动态演示堆排序的过程 How Heap Sort Works 最近做了一个用Unity3D动态演示堆排序过程的程序. I've made this heap sort demo to show how heap sort works recently. 效果图(Demo) 一图抵千言. A picture paints a thousand words. 您可以在此查看完整的动态GIF效果图.博客园里放不下这么大的GIF图. 链接:http://p

数据结构精要------直接选择和堆排序算法

上篇总结中主要实践了算法的内排序的交换排序,那么接下来我们继续实践选择排序的两种:直接选择和堆排序算法. -----直接选择排序 package com.sort; /** * 直接选择排序算法 * @author weixing-yang * * 算法思路: * 首先找出最大元素,将其与a[n-1]位置置换. * 然后在余下的n-1个元素中寻找最大元素,将其与a[n-2]位置置换. * 如此进行下去,知道n个元素排序完成. */ public class SelectSort { public

算法 - 堆排序

堆排序 Heap Sort 堆排序是一种选择排序,其时间复杂度为O(nlogn). 堆的定义 n个元素的序列{k1,k2,-,kn}当且仅当满足下列关系之一时,称之为堆. 情形1:ki <= k2i 且ki <= k2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大顶堆) 其中i=1,2,-,n/2向下取整; 若将和此序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,则堆的含义表明,完全二叉树中所有非终端结点

算法 Heap sort

// -------------------------------------------------------------------------------------------------------------------- // <copyright file="Program.cs" company="Chimomo's Company"> // // Respect the work. // // </copyright>

STL sort

STL的sort()算法,数据量大时采用Quick Sort,分段递归排序,一旦分段后的数据量小于某个门槛,为避免Quick Sort的递归调用带来过大的额外负荷,就改用Insertion Sort.如果递归层次过深,还会改用Heap Sort.本文先分别介绍这个三个Sort,再整合分析STL sort算法(以上三种算法的综合) -- Introspective Sorting(内省式排序). 一.Insertion Sort Insertion Sort是<算法导论>一开始就讨论的算法.它的

Bubble, Insertion, Selection, Quick and Heap Sort

Bubble, Insertion, Selection, Quick and Heap Sort Bubble Sort 冒泡排序是基本的排序算法之一,时间复杂度为,空间复杂度也为.该算法不常被使用,因为和插入排序相比较,插入排序的时间复杂度为,而空间复杂度为.属于稳定排序. 有三种方法可以改进Bubble Sort,①当一轮比较却没有发生交换时,认为数据已经有序,停止排序.②当进行i轮排序后,数据序列后的N-i个元素已经有序,可以不考虑.③假设Data[i]与Data[i+1]是发生的最后一

排序篇

排序有以下5类: 插入排序,交换排序,交换排序,并归排序,分配排序. 一.插入类排序 1.直接插入排序 思想:有数组R[1...n].初始时,R[1]看做有序区,R[2...n],看做无序区,讲R[i](1<i<n+1)依次插入R[1...i-1]的有序区,直到生成有n条记录的有序区. 基本操作:增量法,将当前无序区的第1个记录R[i]插入到有序区R[1...i-1]中适当的位置,得到新的R[1...i]的有序区. 方法一: (1)当前有序区R[1...i]中查找R[i]的正确插入位置k(1&