HDU 1872 穩定排序

2021-08-04 23:11:57 字數 1794 閱讀 4709

大家都知道,快速排序是不穩定的排序方法。 

如果對於陣列中出現的任意a

ii,aj

j(ii

i==aj

j,在進行排序以後ai

i一定出現在aj

j之前,則認為該排序是穩定的。 

某高校招生辦得到乙份成績列表,上面記錄了考生名字和考生成績。並且對其使用了某排序演算法按成績進行遞減排序。現在請你判斷一下該排序演算法是否正確,如果正確的話,則判斷該排序演算法是否為穩定的。 

input

本題目包含多組輸入,請處理到檔案結束。 

對於每組資料,第一行有乙個正整數n(0

output

對於每組資料,如果演算法是正確並且穩定的,就在一行裡面輸出"right"。如果演算法是正確的但不是穩定的,就在一行裡面輸出"not stable",並且在下面輸出正確穩定排序的列表,格式同輸入。如果該演算法是錯誤的,就在一行裡面輸出"error",並且在下面輸出正確穩定排序的列表,格式同輸入。 

注意,本題目不考慮該排序演算法是錯誤的,但結果是正確的這樣的意外情況。

sample input

aa 10

bb 10

cc 20

cc 20

bb 10

aa 10

3aa 10

bb 10

cc 20

cc 20

aa 10

bb 10

3aa 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

題意:sort直接排序可能存在不穩定性

題解:分數不相同直接sort從高到低排序,分數如果相同,按輸入名字的id的先後順序排(這裡不是按字典序排,是按名字出現的先後,即剛開始在前,排後也在前。「這個地方迷失了好久好久,當成了字典序排序...」)

ac**:

1 #include2 #include

3 #include4

using

namespace

std;

5struct

stu6 p[300],q[300

];10

bool

cmp(stu x,stu y)

1117

else

18 23}

24int

main()

2532

for(i=0;i)

33 scanf("

%s %d

",q[i].num,&q[i].score);

34 sort(p,p+n,cmp);

35 j=0

;36 k=0;37

38for(i=0;i)

39

44if(j==n&&k==n) printf("

right\n

");

45else

if(k==n&&j!=n)

46

50else

51 56}

57return0;

58 }

hdu 1872 穩定排序

題目傳送門 hdu 1872 problem description 大家都知道,快速排序是不穩定的排序方法。如果對於陣列中出現的任意a i aj,其中a i a j 在進行排序以後a i 一定出現在a j 之前,則認為該排序是穩定的。某高校招生辦得到乙份成績列表,上面記錄了考生名字和考生成績。並且...

HDU 1872 穩定排序

problem description 大家都知道,快速排序是不穩定的排序方法。如果對於陣列中出現的任意a i a j i input 本題目包含多組輸入,請處理到檔案結束。對於每組資料,第一行有乙個正整數n 0 output 對於每組資料,如果演算法是正確並且穩定的,就在一行裡面輸出 right ...

穩定排序 HDU 1872

大家都知道,快速排序是不穩定的排序方法。如果對於陣列中出現的任意a i aj,其中a i a j 在進行排序以後a i 一定出現在a j 之前,則認為該排序是穩定的。某高校招生辦得到乙份成績列表,上面記錄了考生名字和考生成績。並且對其使用了某排序演算法按成績進行遞減排序。現在請你判斷一下該排序演算法...