sort(hdu oj 1425)计数排序和快速排序
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)计数排序和快速排序的更多相关文章
- HDU-1425-sort(计数排序以及快速排序和堆排序的变种)
计数排序 Accepted 1425 483MS 5276K 997 B G++ #include "bits/stdc++.h" using namespace std; typ ...
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和 ...
- 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 ...
- Uva-------(11462) Age Sort(计数排序)
B Age Sort Input: Standard Input Output: Standard Output You are given the ages (in years) of all ...
- 计数排序(Count Sort )与插入排序(Insert Sort)
计数排序法:计数数组适用于当前数组密集的情况.例如(2,3,5,4,2,3,3,2,5,4) 方法:先找出最大值最小值,之后统计每个数出现的次数,根据次数从小到大往数组里添加 计数排序法是一种不需要比 ...
- counting sort 计数排序
//counting sort 计数排序 //参考算法导论8.2节 #include<cstdio> #include<cstring> #include<algorit ...
- 《算法导论》——计数排序Counting Sort
今天贴出的算法是计数排序Counting Sort.在经过一番挣扎之前,我很纠结,今天这个算法在一些scenarios,并不是最优的算法.最坏情况和最好情况下,时间复杂度差距很大. 代码Countin ...
- 计数排序与桶排序(bucket sort)
Bucket Sort is a sorting method that subdivides the given data into various buckets depending on cer ...
- 排序算法六:计数排序(Counting sort)
前面介绍的几种排序算法,都是基于不同位置的元素比较,算法平均时间复杂度理论最好值是θ(nlgn). 今天介绍一种新的排序算法,计数排序(Counting sort),计数排序是一个非基于比较的线性时间 ...
随机推荐
- tr命令-转换和删除字符
tr 转换和删除字符 支持标准输入 格式 tr [OPTION]...SET1[SET2] Translate, squeeze, and/or delete characters from stan ...
- 蓝桥杯 Island Hopping Java代码
问题描述 太平洋岛网公司(PLN)已经瞄向了太平洋中的一些群岛.这些群岛没有快捷的互联网连接.PLN计划向群岛提供互联网服务,以开发这个太平洋中潜在的市场.每组群岛的核心岛屿已经被深海电缆 ...
- rsync 守护进程模式搭建 与常见报错
守护进程模式搭建 1.环境准备 2.安装rsync(做备份的服务器都安装) [root@backup ~]# yum install -y rsync 3.服务端配置 [root@backup ~]# ...
- 一起学Vue:入门
Why-为什么需要Vue? 前端开发存在的问题? 其一,需求变化频率更高 产品功能迭代前端肯定需要跟着调整. 提意见的人多,前端嘛谁都能看得见,所以,谁都可以指手画脚提一点意见.产品经理.项目经理.老 ...
- PostgreSQL 报错 Problem running post-install step.Installation may not complete correctlyThe database cluster initialisation failed.
在点击完next后安装进度条到最后会弹出题目这个错误 之前选择locale选择china/Singapore 或者china/hongkong都会报错 我的解决方案是 不选择,使用默认的就不会报错,并 ...
- APIO 2020 爆零记
Day -3 这几天集训,貌似大家都没有把APIO放在心上... Day 0 试了下机(非官方选手)... 感觉界面还是比较清新,(至少吊打BZOJ一个数量级) (话说APIO2020中国镜像为什么还 ...
- python开发基础(一)-if条件判断,while循环,break,continue,
条件语句 (1)if 基本语句 if 条件 : 内部代码块 else: .... print() (2)if 嵌套 (3)if elif 语句 (4)if 1==1: pass # if不执行,pas ...
- Django之简易用户系统(3)
目录 1. 总体设计思路 2. 搭建简易用户系统 2.1 配置模型Model 2. 2 写入数据库: 2.3 数据库验证表: 2.4 路由URL配置: 2.5 用户增加 后台执行脚本配置: 视图模板配 ...
- XJOI 夏令营501-511测试11 游戏
Alice和Bob两个人正在玩一个游戏,游戏有很多种任务,难度为p的任务(p是正整数),有1/(2^p)的概率完成并得到2^(p-1)分,如果完成不了,得0分.一开始每人都是0分,从Alice开始轮流 ...
- How to Convert and Import VHD to VMDK (VMWare)
VHD or Virtual Hard Disk is the disk image format used by Microsoft virtualization software such as ...