sort 函式對結構體的排序問題

2021-10-02 02:41:53 字數 1866 閱讀 5284

翻譯:

程式設計能力測驗(pat)是由浙江大學電腦科學與技術學院開發的。每個測試應該同時執行在幾個地方,最終和ranklists將合併後立即測試。現在你的工作是編寫乙個程式,正確合併所有ranklists並生成最終的排名。

輸入格式

每個輸入檔案包含乙個測試用例。對於每個案例,第一行包含乙個正數n(≤100),為測試點的數量。然後輸入n組ranklists,每個輸入起始一行包含乙個正整數k(≤300),為課題組的數量,然後是k行包含考號(13位數)和每個考生的總分。一行中的所有數字用空格分開。

輸出格式

要求將所有考生按分數從高到低排序,分數一樣的按考號排序,並按順序輸出所有考生的准考證號、總排名、考場號以及考場內排名。

利用c++庫「algorithm」中的sort函式進行排序,sort函式有三個引數如下:

sort(首元素位址-必填,尾元素位址的下乙個位址-必填,比較函式-可選)

當不填比較函式時,預設公升序排序。

比較函式常定義為「bool cmp(elemtype a, elemtype b)」的形式,舉例如下:

bool

cmp(student a, student b)

由於要求進行考場內排序,故可在乙個考場的資訊輸入完成後立刻對其進行sort排序,並確定考場內排名。

由於排名時,存在兩者及以上考生成績相同的情況,因此若設考場內第一名排名記為1,則遍歷剩餘考生,若分數與其前一名相同,則排名相同;否則排名為下標差加1。

#include

#include

#include

using

namespace std;

struct studentstu[

30001];

bool

cmp(student a, student b)

intmain()

/*---按考場進行排名---*/

sort

(stu + num - k, stu + num, cmp)

; stu[num - k]

.room_rank =1;

for(j = num - k +

1; j < num; j++)}

/*---對所有人進行排名---*/

sort

(stu, stu + num, cmp)

; stu[0]

.rank =1;

for(i =

1; i < num; i++

)printf

("%d\n"

, num)

;for

(i =

0; i < num; i++

)return0;

}

靈活利用c++庫內函式,完成世間複雜度o(n

)o(n)

o(n)

的快速排序過程,由於該sort()函式在開發初期避免了由於有序序列帶來的演算法退化至o(n

2)o(n^2)

o(n2

)的情況,因此成為很好的排序選擇。

注意cmp()函式依情況進行調整,切莫侷限思路。

[1]. 《演算法筆記》p101-106,p235-242

[2]. using namespace std

[3]. string和string.h的區別

sort函式對結構體多級排序

一 為什麼要用c 標準庫里的排序函式 sort 函式是c 一種排序方法之一,學會了這種方法也打消我學習c 以來使用的氣泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用的排序方法是類似於快排的方法,時間複雜度為n log2 n 執行效率較高!二 c 標準庫里的排序函式的使用方法 i sort函式...

結構體排序 sort()函式

只有用法示例,沒有函式詳解 該題題目為 有一種有趣的字串價值計算方式 統計字串中每種字元出現的次數,然後求所有字元次數的平方和作為字串的價值 例如 字串 abacaba 裡面包括4個 a 2個 b 1個 c 於是這個字串的價值為4 4 2 2 1 1 21 牛牛有乙個字串s,並且允許你從s中移除最多...

用sort對結構體排序

一 文字描述 當我們使用sort對結構體進行排序時,我們要首先自己編寫乙個排序函式,在排序函式中,規定好排序的優先順序 二 偽 展示 1.先寫標頭檔案 include 呼叫sort函式必備 或者直接編寫c 萬能標頭檔案 include.h 2.編寫題目所需要的結構體 struct num 設定結構體...