hdu 1425:sort(排序,经典题。快排模板)
sort
Time Limit : 6000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 3 Accepted Submission(s) : 2
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
Input
Output
Sample Input
5 3
3 -35 92 213 -644
Sample Output
213 92 3
Hint
请用VC/VC++提交
Author
Source
#include <iostream>
#include <stdio.h>
using namespace std;
int a[];
int main()
{
int n,m;
while(cin>>n>>m){
int i,j;
for(i=;i<=n;i++)
scanf("%d",&a[i]);
for(i=;i<=n-;i++)
for(j=;j<=n-i;j++)
if(a[j]>a[j+]){
int t;
t=a[j];a[j]=a[j+];a[j+]=t;
}
for(i=n;i>=n-m+;i--){
if(i==n-m+)
cout<<a[i]<<endl;
else
cout<<a[i]<<' ';
}
}
return ;
}
惭愧的是,为了省事,这道题我直接套用了<algorithm>中的sort()函数,从网上得知该函数使用的是内省排序,时间复杂度是O(nlogn),应付这道题是够了,时间用了500+MS。当然你也可以采用快排,时间复杂度也是O(nlogn),对付这道题也没问题。
注意:输出前m个数的时候,最后一个数后面不能带空格' ',否则提交会格式错误。
有时间会重新用这道题练习一下,低效率的算法通过不了这道题。
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int a[];
int main()
{
int n,m;
while(cin>>n>>m){
int i;
for(i=;i<=n;i++) //输入
scanf("%d",&a[i]);
sort(a+,a+n+); //从小到大排序
for(i=n;i>=n-m+;i--){ //输出前m个大的数
if(i==n-m+)
cout<<a[i]<<endl;
else
cout<<a[i]<<' ';
}
}
return ;
}
| Run ID | Submit Time | Judge Status | Pro.ID | Exe.Time | Exe.Memory | Code Len. | Language | Author |
| 10133960 | 2014-02-20 15:49:42 | Accepted | 1425 | 593MS | 2284K | 343 B | C++ | freecode |
正好看到数据结构内排序这一部分,想起了这道题,拿它来练习快速排序正好。
注意:输入的时候尽量用scanf(),用cin会超时。
快排模板:
void quicksort(int a[],int s,int t) //对a[]的第s个到第t个元素进行从小到大的排序
{
int i=s,j=t;
int tmp = a[s];
if(s<t){ //区间内元素剩0个或者1个的时候停止
while(i<j){
while(i<j && a[j]>=tmp)
j--;
a[i] = a[j];
while(i<j && a[i]<=tmp)
i++;
a[j] = a[i];
}
a[i] = tmp;
quicksort(a,s,i-); //对左区间递归排序
quicksort(a,i+,t); //对右区间递归排序
}
}
本题代码:
#include <iostream>
#include <stdio.h>
using namespace std;
int a[];
void quicksort(int a[],int s,int t)
{
int i=s,j=t;
int tmp = a[s];
if(s<t){ //区间内元素剩0个或者1个的时候停止
while(i<j){
while(i<j && a[j]>=tmp)
j--;
a[i] = a[j];
while(i<j && a[i]<=tmp)
i++;
a[j] = a[i];
}
a[i] = tmp;
quicksort(a,s,i-); //对左区间递归排序
quicksort(a,i+,t); //对右区间递归排序
}
}
int main()
{
int i;
int n,m;
while(cin>>n>>m){
for(i=;i<=n;i++)
scanf("%d",&a[i]);
quicksort(a,,n);
for(i=n;i>=n-m+;i--){
printf("%d",a[i]);
if(i!=n-m+)
printf(" ");
else
printf("\n");
}
}
return ;
}
| Run ID | Submit Time | Judge Status | Pro.ID | Exe.Time | Exe.Memory | Code Len. | Language | Author |
| 10361233 | 2014-03-21 19:40:50 | Accepted | 1425 | 468MS | 2276K | 693 B | C++ | freecode |
Freecode : www.cnblogs.com/yym2013
hdu 1425:sort(排序,经典题。快排模板)的更多相关文章
- E题hdu 1425 sort
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1425 sort Time Limit: 6000/1000 MS (Java/Others) M ...
- leetcode 75 Sort Colors 计数排序,三路快排
解法一:计数排序:统计0,1,2 的个数 时间复杂度:O(n) 空间复杂度:O(k) k为元素的取值范围, 此题为O(1) class Solution { public: void sortC ...
- hdu - 6281,2018CCPC湖南全国邀请赛F题,快排
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6281 题意: 根据已给出的式子,进行排序,然后输出排完序后原先的下表. 题解:用结构体保存,在用结构体 ...
- C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)
#include<stdio.h> #include<malloc.h> #define LEN sizeof(struct Student) struct Student / ...
- HDU 1425 sort(堆排序/快排/最大堆/最小堆)
传送门 Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不 ...
- hdu 1425 sort 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1425 常规的方法是对输入的数从大到小进行排序(可以用sort或qsort),然后输出前m大的数. 不过 ...
- HDU 1425 sort hash+加速输入
http://acm.hdu.edu.cn/showproblem.php?pid=1425 题目大意: 给你n个整数,请按从大到小的顺序输出其中前m大的数. 其中n和m都是位于[-500000,50 ...
- HDU 1425 sort 【哈希入门】
题意:给出n个数,输出前m大的数 和上一题一样,将输入的数加上一个极大地值作为地址 #include<iostream> #include<cstdio> #include&l ...
- HDU 1425 sort 题解
选择出数列中前k个最大的数. 这里由于数据特殊.所以能够使用hash表的方法: #include <cstdio> #include <algorithm> #include ...
随机推荐
- 36、TreeSet详解
TreeSet是SortedSet接口的实现类,TreeSet可以保证元素处于排序状态.与HashSet相比,TreeSet还提供了如下几个而外的方法: 1).Comparator comparato ...
- String的split()方法探索和大揭秘
事实上没打算写这么一篇博文的,可是昨天在逛论坛的时候,发现一帖子,然后我又把帖子的内容在群里发了一通,结果出现了让人吃惊的结果,所以这里简单的给大家分享一下split()方法,免得大伙儿以后还会出现这 ...
- jQuery方法一览
Attribute: $(”p”).addClass(css中定义的样式类型); 给某个元素添加样式 $(”img”).attr({src:”test.jpg”,alt:”test Image”}); ...
- android 屏幕上面画线
作业如下:在android屏幕上面任意画线 package feng.f121.drawline;//本人创建的包名,每人有每人的不同的包 import java.security.PublicKey ...
- unity, asset operations
//----create asset //ref: http://wiki.unity3d.com/index.php?title=CreateScriptableObjectAsset CmyScr ...
- Android Studio 使用感受 错误解决
刚到公司不久,公司叫我用Android studio软件,曾经一直在用的是eclipse ADT.突然接触到的新名词让我有点适应只是来. 好吧,既然是公司要求,肯定有它的道理.就从网上下载了它的安装包 ...
- 为什么在c语言中使用gets函数是危险的
If you have code like this: char s[10]; gets( s ); and you type in more than 10 characters when th ...
- docker 不同机器上容器互相通信
环境说明: 1.系统:centos7 2.docker:Docker version 1.3.2 3.docker启动参数:OPTIONS=--selinux-enabled=false -H fd: ...
- Node.js用fs.renameSync报cross-device link not permitted错
转自: http://blog.csdn.net/starrexstar/article/details/8048722 今天把 Manuel Kiessling 的[The Node Beginne ...
- python 获取当前时间的用法
1.先导入库:import datetime 2.获取当前日期和时间:now_time = datetime.datetime.now() 3.格式化成我们想要的日期:strftime() 比如:“2 ...