#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. 2019 易车java面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.易车等公司offer,岗位是Java后端开发,最终选择去了易车. 面试了很多家公司,感觉大部分公司考察的点都差不多 ...

  2. 2019 唯品会java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.唯品会等公司offer,岗位是Java后端开发,因为发展原因最终选择去了唯品会,入职一年时间了,也成为了面试官 ...

  3. 【转载】C#中int.TryParse方法和int.Parse方法的异同之处

    在C#编程过程中,int.TryParse方法和int.Parse方法都可以将字符串string转换为整型int类型,但两者还是有区别,最重要的区别在于int.TryParse方法在字符串无法转换为i ...

  4. exchange From Middle English eschaunge

    exchange From Middle English eschaunge, borrowed from Anglo-Norman eschaunge exchange 1.An act of ex ...

  5. static 关键字有什么作用

    static关键字的含义及使用场景 static是Java50个关键字之一.static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局静态成员变量,修饰方法表示静态方法.(注意:不能修饰 ...

  6. android 各个存储路径及获取方法总结

    最长用到的就这三个位置 /data/data/包名/ /sdcard/Android/data/包名/ /sdcard/xxx 前两个是应用内部存储, 会随着app的卸载而自动删除, sdcard中其 ...

  7. js跳出循环的方法区别(break,continue,return)(转载)

    转自:http://blog.csdn.net/fxss5201/article/details/52980138 js编程语法之break语句: break语句会使运行的程序立刻退出包含在最内层的循 ...

  8. idea中flink启动报错org.apache.flink.api.common.ExecutionConfig$GlobalJobParameters

    启动时出现如下报错: Caused by: java.lang.ClassNotFoundException: org.apache.flink.api.common.ExecutionConfig$ ...

  9. python测试开发django-44.xadmin上传图片和文件

    前言 xadmin上传图片和上传文件功能 依赖环境 如果没安装Pillow的话,会有报错:practise.Upload.upload_image: (fields.E210) Cannot use ...

  10. sklearn.feature_extraction.text 的TfidfVectorizer函数

    TfidfVectorizer函数主要用于,将文档(句子)等通过 tf-idf值来进行表示,也就是用一个tf-idf值的矩阵来表示文档(句子也可). from sklearn.feature_extr ...