大家都知道,快速排序是不穩定的排序方法。
如果對於陣列中出現的任意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 10cc 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 stablecc 20
aa 10
bb 10
right
error
cc 20
aa 10
bb 10
題意:sort直接排序可能存在不穩定性
題解:分數不相同直接sort從高到低排序,分數如果相同,按輸入名字的id的先後順序排(這裡不是按字典序排,是按名字出現的先後,即剛開始在前,排後也在前。「這個地方迷失了好久好久,當成了字典序排序...」)
ac**:
1 #include2 #include3 #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 之前,則認為該排序是穩定的。某高校招生辦得到乙份成績列表,上面記錄了考生名字和考生成績。並且對其使用了某排序演算法按成績進行遞減排序。現在請你判斷一下該排序演算法...