hdoj 1872 稳定排序

稳定排序

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4042    Accepted Submission(s):
1581

Problem Description

大家都知道,快速排序是不稳定的排序方法。
如果对于数组中出现的任意a[i],a[j](i<j),其中a[i]==a[j],在进行排序以后a[i]一定出现在a[j]之前,则认为该排序是稳定的。

某高校招生办得到一份成绩列表,上面记录了考生名字和考生成绩。并且对其使用了某排序算法按成绩进行递减排序。现在请你判断一下该排序算法是否正确,如果正确的话,则判断该排序算法是否为稳定的。

Input

本题目包含多组输入,请处理到文件结束。
对于每组数据,第一行有一个正整数N(0<N<300),代表成绩列表中的考生数目。
接下来有N行,每一行有一个字符串代表考生名字(长度不超过50,仅包含‘a‘~‘z‘),和一个整数代表考生分数(小于500)。其中名字和成绩用一个空格隔开。
再接下来又有N行,是上述列表经过某排序算法以后生成的一个序列。格式同上。

Output

对于每组数据,如果算法是正确并且稳定的,就在一行里面输出"Right"。如果算法是正确的但不是稳定的,就在一行里面输出"Not
Stable",并且在下面输出正确稳定排序的列表,格式同输入。如果该算法是错误的,就在一行里面输出"Error",并且在下面输出正确稳定排序的列表,格式同输入。

注意,本题目不考虑该排序算法是错误的,但结果是正确的这样的意外情况。

Sample Input

3

aa 10

bb 10

cc 20

cc 20

bb 10

aa 10

3

aa 10

bb 10

cc 20

cc 20

aa 10

bb 10

3

aa 10

bb 10

cc 20

aa 10

bb 10

cc 20

Sample Output

Not Stable

cc 20

aa 10

bb 10

Right

Error

cc 20

aa 10

bb 10

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct record  //记录排序前输入的数据
{
	char name[50];
	int fen;
	int time;
}s[310];
struct line//记录题目所给的排序后的输入
{
	char namep[50];
	int fenp;
}sp[310];
bool cmp(record a,record b)
{
     if(a.fen!=b.fen)
     return a.fen>b.fen;
     else
     return a.time<b.time;//数据前后出现的时间早晚
}
int main()
{
	int n,m,j,i,sum,t,f;
	while(scanf("%d",&n)!=EOF)
	{
		for(i=0;i<n;i++)
		{
			s[i].time=i;
		    scanf("%s%d",s[i].name,&s[i].fen);
		}
		sort(s,s+n,cmp);
		t=0;f=0;
	    for(i=0;i<n;i++)
	    {
	    	scanf("%s%d",sp[i].namep,&sp[i].fenp);
	        if(strcmp(s[i].name,sp[i].namep)!=0)   //判断两字符串是否相等
	        t++;
	        if(s[i].fen!=sp[i].fenp)//判断自己的排序与题目中所给排序是否相同
	        f++;
	    }
	    if(t==0&&f==0)
	    printf("Right\n");
	    if(t!=0&&f==0)
	    {
	    	printf("Not Stable\n");
	    	for(i=0;i<n;i++)
	    	{
	    		printf("%s %d\n",s[i].name,s[i].fen);
	    	}
	    }
	    if(f!=0)
	    {
	    	printf("Error\n");
	    	for(i=0;i<n;i++)
	    	{
	    		printf("%s %d\n",s[i].name,s[i].fen);
	    	}
	    }
	}
	return 0;
}

  

时间: 2024-08-08 23:29:25

hdoj 1872 稳定排序的相关文章

HDU 1872 稳定排序

稳定排序 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5762    Accepted Submission(s): 2159 Problem Description 大家都知道,快速排序是不稳定的排序方法. 如果对于数组中出现的任意a[i],a[j](i<j),其中a[i]==a[j],在进行排序以后a[i]一定出现在a[j]之前

稳定排序nlogn之归并排序_一维,二维

稳定排序:排序时间稳定的排序 稳定排序包括:归并排序(nlogn),基数排序[设待排序列为n个记录,d个关键码,关键码的取值范围为radix,则进行链式基数排序的时间复杂度为O(d(n+radix)) ],冒泡排序(n^2),插入排序(n^2),交换排序(n^2),计数排序[n为数字个数,k为数字范围,O(n+k)]等. Problem:对n个数进行排序,n<=100000,1s以内 正常来说我们都用qsort(c),sort(c++),但快速排序平均时间复杂度为nlogn,最坏时间复杂度为n^

[转载]稳定排序和不稳定排序

这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定.本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的. 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同.在简单形式化一下,如果Ai = Aj,Ai原来在位置前

如果原来的元素就没有定义&lt;这个运算呢?怎么进行稳定排序呢?

stable_sort是在原来的元素按<排序顺序不变的情况下,按第三个参数做稳定排序的方式,这样理解对吗?那如果原来的元素就没有定义<这个运算呢?怎么进行稳定排序呢? 767wo 362ye 041bo 161ai 377gs 662cm 638vi 742sh 433ei 368ab 449dq 065zc 322xg 620cz 415ge 442nb 526yh 715ru 189mb 718xy 793hk 015vc 775mg 726vr 191fa 710tr 587od 897

稳定排序与非稳定排序判别方法

这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定.本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的. 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同.在简单形式化一下,如果Ai = Aj,Ai原来在位置前

【转】稳定排序和不稳定排序

这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定.本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的. 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同.在简单形式化一下,如果Ai = Aj,Ai原来在位置前

HDU1872 稳定排序

稳定排序 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 1   Accepted Submission(s) : 1 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 大家都知道,快速排序是不稳定的排序方法. 如果对于数组中出现的任意a

稳定排序和不稳定排序(转)

原文链接:http://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html 这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定.本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的. 首先,排序算法的稳定性大家应该都知道,通

【算法】4、稳定排序和不稳定排序

首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同.在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前. 其次,说一下稳定性的好处.排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用.基数排序就是这样,先按低位排序,逐次按高位排序,低位相同的元素其顺序再高位也相同时是不会改变的.另外,如果排序算法稳定,对基于比较的排序算法而言,