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

emm

一开始呢,用快速排序找前m大的数

一提交,超时……淦

后来度娘一搜

原来有计数排序,用空间换时间

#include <stdio.h>
#include <stdlib.h>
#include <memory.h> int num[1000001]; int main()
{
int n, m, i, j, temp;
while (~scanf("%d%d", &n, &m))
{
memset(num, 0, sizeof(num));
for (i = 0; i < n; i++)
{
scanf("%d", &temp);
num[temp + 500000]++;
}
j = sizeof(num) / sizeof(int) - 1;
for (i = 0; i < m; i++)
{
if (i > 0)
printf(" ");
while (num[j] == 0)
j--;
printf("%d", j - 500000);
num[j]--;
}
printf("\n");
}
return 0;
}
#include <stdio.h>
#include <memory.h>
unsigned char num[1000001];
int main()
{
int n, m, i, j = 1000000, t;
while (~scanf("%d%d", &n, &m))
{
memset(num, 0, sizeof(num));
while (n--)
{
scanf("%d", &t);
num[t + 500000]++;
}
while (m--)
{
while (num[j] == 0)
j--;
printf("%d%c", j - 500000, m == 0 ? '\n' : ' ');
num[j]--;
}
}
return 0;
}

这是快速排序的代码(hdu oj G++过了,sdtbu oj C++超时的):

#include <cstdio>
#include <cstdlib> int num[1000000]; void quictSort(int, int, int);
int partition(int, int); int main()
{
int n, m, i;
while (~scanf("%d%d", &n, &m))
{
for (i = 0; i < n; i++)
scanf("%d", &num[i]); quictSort(0, n - 1, m - 1); /*
for (i = 0; i < n; i++)
printf("%d ", num[i]);
printf("\n", num[i]);
printf("*******\n");
*/ for (i = 0; i < m - 1; i++)
printf("%d ", num[i]);
printf("%d\n", num[i]);
}
return 0;
} // 利用快速排序找前m大的数
void quictSort(int left, int right, int mTop)
{
if (left < right)
{
int p = partition(left, right); // 分两段
int len = p - left; quictSort(left, p - 1, mTop); // 左半段排序 if (len < mTop)
quictSort(p + 1, right, mTop - len); // 右半段排序
}
}
// 从大到小排序
int partition(int left, int right)
{
int key = num[left]; // 第一个元素为基准元素
while (left < right)
{
while (left < right && num[right] <= key) // 从右往左找到比基准元素大的
right--;
if (left < right)
num[left] = num[right]; // 把大的交换到左边 while (left < right && num[left] >= key) // 从左往右找到比基准元素小的
left++;
if (left < right)
num[right] = num[left]; // 把小的交换到右边
}
num[left] = key; // 把基准元素赋值回去
return left;
}

sort(hdu oj 1425)计数排序和快速排序的更多相关文章

  1. HDU-1425-sort(计数排序以及快速排序和堆排序的变种)

    计数排序 Accepted 1425 483MS 5276K 997 B G++ #include "bits/stdc++.h" using namespace std; typ ...

  2. 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)

    2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和 ...

  3. UVA 11462 Age Sort(计数排序法 优化输入输出)

    Age Sort You are given the ages (in years) of all people of a country with at least 1 year of age. Y ...

  4. Uva-------(11462) Age Sort(计数排序)

    B Age Sort Input: Standard Input Output: Standard Output   You are given the ages (in years) of all ...

  5. 计数排序(Count Sort )与插入排序(Insert Sort)

    计数排序法:计数数组适用于当前数组密集的情况.例如(2,3,5,4,2,3,3,2,5,4) 方法:先找出最大值最小值,之后统计每个数出现的次数,根据次数从小到大往数组里添加 计数排序法是一种不需要比 ...

  6. counting sort 计数排序

    //counting sort 计数排序 //参考算法导论8.2节 #include<cstdio> #include<cstring> #include<algorit ...

  7. 《算法导论》——计数排序Counting Sort

    今天贴出的算法是计数排序Counting Sort.在经过一番挣扎之前,我很纠结,今天这个算法在一些scenarios,并不是最优的算法.最坏情况和最好情况下,时间复杂度差距很大. 代码Countin ...

  8. 计数排序与桶排序(bucket sort)

    Bucket Sort is a sorting method that subdivides the given data into various buckets depending on cer ...

  9. 排序算法六:计数排序(Counting sort)

    前面介绍的几种排序算法,都是基于不同位置的元素比较,算法平均时间复杂度理论最好值是θ(nlgn). 今天介绍一种新的排序算法,计数排序(Counting sort),计数排序是一个非基于比较的线性时间 ...

随机推荐

  1. JavaSE学习笔记04方法、数组

    1.方法 java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 设计方法的原则:一个方法只完成1个功能,这样 ...

  2. Storage API简介和存储限制与逐出策略

    目录 简介 常用的客户端存储方式 data storage的类型 逐出策略 Storage API estimate persist persisted 综合使用 总结 简介 对于现代浏览器来说,为了 ...

  3. MVC实现修改数据

    前言 前言 最近没什么好写的,所以写个修改来巩固一下知识 控制器 public ActionResult UpdeteCartsNum(SYS_Carts sYS_Carts) { var list ...

  4. day73:drf:drf视图相关类&路由Routers&创建虚拟环境

    目录 1.APIView 2.GenericAPIView:通用视图类 3.5个视图扩展类:ListModelMixin,CreateModelMixin,RetrieveModelMixin,Upd ...

  5. RPM与YUM使用

    1.RPM 1.1RPM简介 RPM全名RedHat Package Manager 优点: 1. 由于已经编译完成并且打包完毕,所以软件传输与安装上很方便 (不需要再重新编译): 2. 由于软件的信 ...

  6. airtest本地连接和远程连接

    一.本地连接 # -*- coding: utf-8 -*-# from poco.drivers.android.uiautomation import AndroidUiautomationPoc ...

  7. [斯坦福大学2014机器学习教程笔记]第六章-代价函数(Cost function)

    在这节中主要讲的是如何更好地拟合逻辑回归模型的参数θ.具体来说,要定义用来拟合参数的优化目标或者叫代价函数,这便是监督学习问题中的逻辑回归模型的拟合问题. 我们有一个训练集,训练集中有m个训练样本:{ ...

  8. openspiel 随笔 05.05

    现阶段的任务是向openspiel 中添加e一个自己的游戏 上次已经将大体的逻辑写完了,但运行时出了问题.state 为空. Incorrect number of characters in str ...

  9. 解决LINK : fatal error LNK1104: 无法打开文件“xxxx.lib”

    举个例子

  10. 使用 Dockerfile 文件但是不使用缓存生成镜像

    前一段时候使用 Dockerfile 重新部署 NetCore3.1 项目的时候很顺利,由来由于一些原因,我把以前的镜像删除,如果我们大家继续使用 docker  build 命令去生成镜像的话就会报 ...