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

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

//sort也可以过//936Ms
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1000005;
int ans[maxn];
bool cmp(int a,int b)
{
return a>b;
}
int main ()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=0;i<n;i++)
scanf("%d",&ans[i]);
sort(ans, ans+n, cmp);
for(int i=0;i<m-1;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[m-1]);
}
return 0;
}
//快排1//873Ms
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1000005;
int ans[maxn];
void quickSort(int l,int r)
{
if(l>=r)
return ;
int i,j;
for(j=i=l+1;i<=r;i++)
if(ans[i]>ans[l])
swap(ans[i],ans[j++]);
swap(ans[l],ans[--j]);
quickSort(l, j-1);
quickSort(j+1, r);
}
/*bool cmp(int a,int b)
{
return a>b;
}*/
int main ()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=0;i<n;i++)
scanf("%d",&ans[i]);
//sort(ans, ans+n, cmp);
quickSort(0, n-1);
for(int i=0;i<m-1;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[m-1]);
}
return 0;
}
//快排2//982ms
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1000005;
int ans[maxn];
void quickSort(int l,int r)
{
if(l>=r)
return ;
int left=l,right=r,temp=ans[left];
while(left<right)
{
while(left<right&&ans[right]<=temp)
right--;
ans[left]=ans[right];
while(left<right&&ans[left]>=temp)
left++;
ans[right]=ans[left];
}
ans[left]=temp;
quickSort(l,left-1);
quickSort(left+1, r);
}
/*bool cmp(int a,int b)
{
return a>b;
}*/
int main ()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=0;i<n;i++)
scanf("%d",&ans[i]);
//sort(ans, ans+n, cmp);
quickSort(0, n-1);
for(int i=0;i<m-1;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[m-1]);
}
return 0;
}
//快排3//624Ms
#include <iostream>
#include <string.h>
#include <cstdio>
#include<algorithm>
using namespace std;
const int N=1000005;
int num[N];
int partition(int low,int high){
int i=low,j=high,key=num[low];
while(i<j){
while(i<j&&num[j]>key)
--j;
swap(num[i],num[j]);
//int t=num[i]; num[i]=num[j];num[j]=t;
while(i<j&&num[i]<key)
++i;
swap(num[i],num[j]);
//t=num[i]; num[i]=num[j];num[j]=t;
}
return i;
}
void quick_sort(int low,int high){
if(low<high){
int x=partition(low,high);
quick_sort(low,x-1);
quick_sort(x+1,high);
}
}
int main(){
//freopen("11.txt","r",stdin);
int n,m;
while(~scanf("%d%d",&n,&m)){
for(int i=0;i<n;++i)
scanf("%d",&num[i]);
quick_sort(0,n-1);
for(int i=n-1;i>n-m;--i)
printf("%d ",num[i]);
printf("%d",num[n-m]);
printf("\n");
}
return 0;
}

HDU1425 <sort 快排>的更多相关文章

  1. Quick Sort(快排)

    这是挖坑填补法的演示 快排之挖坑填补法: void Quick(int top/*起始位置*/,int end/*末尾位置*/,int arr[])//挖坑填补法 { int i=top,j=end, ...

  2. sort 快排解决百万级的排序

    问题:给n个整数,按从大到小的顺序,输出前m大的整数0<m,n<1000000,每个整数[-500000,500000]输入:5 33 -35 92 213 -644输出:213 92 3 ...

  3. 函数模拟sort快排

    设计一个对一维数组进行排序的sort函数,并调用它实现数组排序 思路:函数调用不止调用一个,最主要对函数不熟悉: #include<stdio.h> #define N 10 int ma ...

  4. java链表实现快排

    链表文件 package sort; public class SqList {    public int LIST_INIT_SIZE = 8;//链表的原始大小    private int I ...

  5. 结构体快排回顾(sort)

    一般来说,我做竞赛的时候排序一般用快排 很快很方便 普通sort(从小到大) sort(a,a+n); 直接贴一段代码吧,包含了vector,sort,结构体等简单东西综合 #include < ...

  6. JavaScript快排与原生sort的测试

    今天工作室断网!果断回宿舍,不然各种资料都没有.(他说将来会找到!)不好意思,又哼起来了.进入主题,大家都知道,快排是各种排序算法中,最高效的也是应用最广的,还有更重要的一点,面试特别爱考的! 其实大 ...

  7. 阮一峰大神的快排?刚才还在纠结sort()的我!真是个小傻瓜

    看到这个标题之后 我毫不犹豫的点进去了 趁现在不忙我赶紧把代码写到了我的小本本上好好研究研究 (写的就不放进来了 有点丑) 研究了下  第一反应 明明能用sort()解决的 为什么非要写这么一大串 但 ...

  8. 待字闺中之快排单向链表;leetcode之Sort List

    题目来源.待字闺中.原创@陈利人 .欢迎大家继续关注微信公众账号"待字闺中" 分析:思路和数据的高速排序一样,都须要找到一个pivot元素.或者节点. 然后将数组或者单向链表划分为 ...

  9. hdu 1425:sort(排序,经典题。快排模板)

    sort Time Limit : 6000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submissi ...

随机推荐

  1. 使用 VirtualBox 虚拟机在电脑上运行 Android 4.0 系统,让电脑瞬间变安卓平板

    Ref: http://www.iplaysoft.com/android-v4-ics-for-virtualbox.html 随着 Android 手机的各种软件应用越来越多,很多没有购买的朋友都 ...

  2. Opencv2系列学习笔记10(提取连通区域轮廓) 另一个

    http://blog.csdn.net/lu597203933/article/details/17362457 连通区域指的是二值图像中相连像素组成的形状.而内.外轮廓的概念及opencv1中如何 ...

  3. lua学习

    在lua中,一切都是变量,除了关键字. 1.注释: 单行注释: 连续两个减号“--”表示注释的开始,一直延续到行末.相当于C语言中的“//” 多行注释:由“--[[”表示注释开始, “]]”表示注释结 ...

  4. Django:之传递数据给JS、Ajax和Ajax CSRF认证

    Django传递数据给JS 有时候我们想把一个list或者dict传递给javascript,处理后显示到网页上,比如要用js进行可视化到数据. 请注意:如果是不处理,直接显示在网页上,用Django ...

  5. 第13章 Swing程序设计----JFrame窗体

    JFrame窗体是一个容器,它是Swing程序中各个组件的载体,可以将JFrame看作是承载这些Swing组件的容器. 在开发应用程序时可以通过继承java.swing.JFrame类创建一个窗体,在 ...

  6. postgres 数据库备份恢复

    postgre 数据库备份恢复命令 备份:pg_dump -U postgres -v -F c -Z 4 -f ***.backup dbname  9压缩率最狠恢复:pg_restore -U p ...

  7. HDU 5963 博弈

    http://acm.hdu.edu.cn/showproblem.php?pid=5963 题目大意:中文题 思路:看ICPC camp好了,简单易懂:https://async.icpc-camp ...

  8. Qt::ConnectionType(信号与槽的传递方式)

    Qt::AutoConnection 自动连接:(默认值)如果信号在接收者所依附的线程内发射,则等同于直接连接.如果发射信号的线程和接受者所依附的线程不同,则等同于队列连接. Qt::DirectCo ...

  9. Inno Setup入门(七)——提供安装语言选项

    Inno Setup安装目录下有一个Languages的文件夹,该文件夹提供了可供使用的语言,通过在脚本中加入[languages]段,可以实现该项功能,实现代码如下: [setup] ;全局设置,本 ...

  10. python socketserver实现客户端多并发

    直接看代码 server #!/usr/bin/env python # -*- coding:utf-8 -*- import socketserver import subprocess clas ...