#include <stdio.h>
#include <stdlib.h>
#include <string.h> void Swap(int a[], int i, int j) // 交换函数
{
int t = a[i];
a[i] = a[j];
a[j] = t;
} void HeapMerge(int *a,int i,int n) //调整函数,也是核心地方 // 以下的树的概念都是把这个堆转变成树来说的
{
int lc = 2*i; // 因为我们用一位数组存放的,这里下标从1开始,如果1存放根结点,那么左紫薯就是2×i 右紫薯是 2 × 1 + 1
int rc = 2*i+1; // 因为堆排序这里是一颗完全二叉树,层次遍历这个树,然后依次放进这个下标从1开始的数组中,得到的就是以上结果了
int k = i; //存放当前调整的结点的下标
if(i <= n/2) //如果大于n/2,就是叶子结点了,就不需要再调整了
{
if(lc <= n && a[lc] > a[k]) // 左子树的比较
{
k = lc;
}
if(rc <= n && a[rc] > a[k]) // 右紫薯的比较 这样子就是选的左右紫薯中大的那个了
{
k = rc;
}
if(k != i) // 如果找到了它的左右紫薯中比它大的
{
Swap(a,i,k); // 交换这两个值
HeapMerge(a,k,n); // 继续把k这个位置的数,也就是上一步中为交换前的a[i],往下调整,要保证左右紫薯都小于根节点
}
}
} void HeapCreat(int *a,int n)
{
for(int i=n/2; i>=1; i--)
{
HeapMerge(a,i,n); // 从第一个非叶子结点开始调整树,n/2就是第一个非叶子结点,完全二叉树的性质决定的。
}
} void HeapSort(int *a,int n)
{
int i;
HeapCreat(a,n); //先调整好树,让成为一个大顶堆
for(i=n; i>=1; i--)
{
Swap(a,1,i); // 把这个堆顶,也就是最大的,放到最后
HeapMerge(a,1,i-1); // i - 1 也就是剩下的再重新调整
// 直到全部完成,层次遍历树变成有序序列,对应的数组就是有序数组
}
} int main()
{
int n,m,p,t, Min;
while(scanf("%d %d",&n,&m)!=EOF)
{
int a[12];
p = 1;
for(int i = 0; i < n; i++) // 这个题的原因,不能全部输入,对于全部的数建堆
{
scanf("%d",&t);
if(p < m + 1)
a[p++]=t;
else
{
Min = 1;
for(int j = 2; j < p; j++)
{
if(a[Min] > a[j])
Min = j;
}
if(a[Min] < t)
a[Min] = t;
}
} //挑出来前 m 大的数
HeapSort(a,m); // 堆排
for(int i = m; i >= 1; i--)
if(i==m)
printf("%d",a[i]);
else
printf(" %d",a[i]);
printf("\n");
}
return 0;
}

数据结构实验之排序四:寻找大富翁(SDUT 3401)的更多相关文章

  1. SDUT 3401 数据结构实验之排序四:寻找大富翁.!

    数据结构实验之排序四:寻找大富翁 Time Limit: 150MS Memory Limit: 512KB Submit Statistic Problem Description 2015胡润全球 ...

  2. SDUT OJ 数据结构实验之排序四:寻找大富翁

    数据结构实验之排序四:寻找大富翁 Time Limit: 200 ms Memory Limit: 512 KiB Submit Statistic Discuss Problem Descripti ...

  3. 数据结构实验之排序二:交换排序 (SDUT 3399)

    #include <iostream> #include <bits/stdc++.h> using namespace std; typedef long long ll; ...

  4. SDUT OJ 数据结构实验之图论四:迷宫探索

    数据结构实验之图论四:迷宫探索 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...

  5. SDUT OJ 数据结构实验之二叉树四:(先序中序)还原二叉树

    数据结构实验之二叉树四:(先序中序)还原二叉树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem ...

  6. SDUT OJ 数据结构实验之排序三:bucket sort

    数据结构实验之排序三:bucket sort Time Limit: 250 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem D ...

  7. SDUT OJ 数据结构实验之排序二:交换排序

    数据结构实验之排序二:交换排序 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...

  8. SDUT OJ 数据结构实验之排序一:一趟快排

    数据结构实验之排序一:一趟快排 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...

  9. SDUT OJ 数据结构实验之排序八:快速排序

    数据结构实验之排序八:快速排序 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 给定N ...

随机推荐

  1. .net core 读取、修改配置文件appsettings.json

    .net core 设置读取JSON配置文件 appsettings.json Startup.cs 中 public class Startup { public Startup(IHostingE ...

  2. x.append()增加不同维度的区别

    b=np.array([[7,2],[2,4],[3,6],[7,8],[9,10]])print(b)print(type(b)) # 结果显示为nunmpy 数组a=[]for i in rang ...

  3. selenium自动化测试框架之PO设计模式

    面向对象的特性:封装.继承.多态.在自动化中一样适用,Selenium自动化测试中有一个名字常常被提及PageObject(思想与面向对象的特性相同),通过PO模式可以大大提高测试用例的维护效率. 传 ...

  4. jsonpath_rw操作json

    from jsonpath_rw import parse def get_key_from_data(key,data): # 定义匹配规则 json_expr=parse(key) result= ...

  5. FI-FBV0 - No batch input data for screen SAPMF05A 0700

    在预制凭证过账的时候报错:没有屏幕SAPMF05A 0700 的批输入数据 https://answers.sap.com/questions/7203025/fbv0-no-batch-input- ...

  6. 巧用浏览器F12调试器定位系统前后端bug-转载

    做测试的小伙伴可能用过httpwatch,firebug,fiddler,charles等抓包(数据包)工具,但实际上除了这些还有一个简单实用并的抓包工具,那就是浏览器的F12调试器. httpwat ...

  7. 【实战3】记一次内网中反弹shell的艰难历程

    # 0x00 前言 最近在客户现场对内网服务器进行渗透测试,发现了大量的弱口令,本次历程就是从这里开始··· # 0x01 弱口令 对目标ip进行端口扫描,开放端口为80,445,1433,3389- ...

  8. sq分页

    create proc RowNumber @pageindex int,@pagesize int AS BEGIN select * from (select ROW_NUMBER() OVER( ...

  9. ThinkPHP模板之二

    模板布局及变量比较,循环. controller <?php /** * Created by PhpStorm. * User: Sahara * Date: 2019/6/23 * Time ...

  10. js 变量以及函数传参

    一.变量: 基本类型是变量对象重新创建一个新值给变量对象空间,虽然是同一个值但是互不影响. 引用类型是也是将一个值重新赋值给新的变量空间,但是这个值是堆中对象的一个指针,新的变量和旧的变量指向是同一个 ...