演算法 查詢排序 之成績排序

2022-09-22 04:18:09 字數 1590 閱讀 2131

分析和思路:

把成績儲存到map或者vector中,然後進行排序。這道題關鍵是處理那個成績相等時,排序後依然保持相對順序不變的問題,費了好大的心思,發現效果依然不是自己想要的,寫出的**如下:

1 #include "

iostream

"2 #include 3 #include 4 #include "

algorithm

"5 #include 6

using

namespace

std;

7int

main()8;

21 unordered_mapm;

22int i=0;//

注意細節

23while(i

2431

sort(vector_score.begin(),vector_score.end());

32//

printf("v size%d",vector_score.size());

33//

printf("m size%d",m.size());

34if(mode==1)35

47}48}

49m.clear();

50vector_score.clear();51}

52else

if(mode==0)53

65}66}

67m.clear();

68vector_score.clear();69}

70}7172

return0;

7374 }

想通過vector元素的順序來確定map中元素的順序,但是依然是map自動排序了。

解決辦法:使用穩定排序stable_sort,改進後的**如下:

1 #include 2 #include 

3 #include 4 #include 5

//#include

6using

namespace

std;78

bool cmp0(const pair &a,const pair &b)912

13bool cmp1(const pair &a,const pair &b)

1417

18void mysort(int n,int

flag)

1926

if(flag==0)27

30else

if(flag==1)31

3435

for(int i=0;i)

3639}40

41int

main()

4248

return0;

49 }

演算法 成績排序

統計一下班裡 n n 名同學在這次數學競賽中,成績在以下各類別的人數。要求 分數為整數,用變數 f f 表示,以百分制作為記分標準。成績在 90 leq f leq 10090 f 1 00 分數之間,用 you 來標識 成績在 80 leq f leq 8980 f 8 9 分數之間,用 lian...

機試之排序 成績排序

用一維陣列儲存學號和成績,然後,按成績排序輸出。輸入描述 輸入第一行包括乙個整數n 1 n 100 代表學生的個數。接下來的n行每行包括兩個整數p和q,分別代表每個學生的學號和成績。輸出描述 按照學生的成績從小到大進行排序,並將排序後的學生資訊列印出來。如果學生的成績相同,則按照學號的大小進行從小到...

演算法之 查詢演算法 氣泡排序

查詢演算法 順序查詢 從頭到尾逐個比較 氣泡排序 思路 依次比較相鄰的兩個數,將比較小的數放在前面,比較大的數放在後面。1 第一次比較 首先比較第一和第二個數,將小數放在前面,將大數放在後面。2 比較第2和第3個數,將小數 放在前面,大數放在後面。3 如此繼續,知道比較到最後的兩個數,將小數放在前面...