菠蘿的成績單 多元素快排

2021-07-31 17:26:25 字數 1433 閱讀 1278

快排不僅利用一種元素進行排序,例如int大小排序,char字典序排序,同時可以進行多元素排序,例如按照質量公升序排序,質量相同時按照**降序排序,此時也可以利用快排進行排序,例如3下面這道題目:

problem description

考完試以後,菠蘿獲得了乙個含有 n 個成績的成績單,他要把成績按照從高到低排序,如果成績相同則按照學生編號從小到大排序。

老師為了檢驗菠蘿是否把成績排序對了,會詢問前 m 高的成績及該學生的編號,你能幫菠蘿回答老師的詢問嗎?

input

輸入資料有多組(資料組數不超過 10),到 eof 結束。

對於每組資料:

•第一行輸入成績的個數 n 以及 m (1 <= n <= 100000, 1 <= m <= n)

•接下來的 n 行,每行輸入 2 個正整數,分別為學生編號 id (1 <= id <= n),成績 ai (1 <= ai <= 10000)

當 n 和 m 同時為 0 時結束程式。

output

對於每組資料:

•第一行輸出 「case #x:」 (輸出不包括引號,且冒號後無空格),x 表示當前為第幾組資料

•之後輸出 m 行。每行格式按照 「編號 成績」 的格式輸出

example input

3 1

1 1

2 2

3 3

5 3

4 2

2 2

1 1

3 3

5 2

0 0example output

case #1:

3 3

case #2:

3 3

2 2

4 2

經過分析,題目意思很清楚,按照成績降序排序,成績相同時按照學生編號公升序排序。所以此題為多元素的快排。

完整**如下:

#include 

#include

struct node

k[100050];

void pai(struct node a, int

y, int z)

a[i] = a[j];

while(i < j && (a[i].score > key1 || (a[i].score == key1 && a[i].id < key2)))

a[j] = a[i];

}a[i].score = key1;

a[i].id = key2;

pai(a, i + 1, z);

pai(a, y, i - 1);

}int main()

pai(k, 0, n - 1);

for(i = 0; i <= m - 1; i++)

}return

0;}

菠蘿的成績單(結構體快排)

考完試以後,菠蘿獲得了乙個含有 n 個成績的成績單,他要把成績按照從高到低排序,如果成績相同則按照學生編號從小到大排序。老師為了檢驗菠蘿是否把成績排序對了,會詢問前 m 高的成績及該學生的編號,你能幫菠蘿回答老師的詢問嗎?input 輸入資料有多組 資料組數不超過 10 到 eof 結束。對於每組資...

帶姓名的成績單 a

作 者 霍雨佳 完成日期 2013 年12月5日 版 本 號 v1.0 問題描述 輸出按成績排名後的同學名單。樣例輸入 樣例輸出 問題分析 輸入同學的姓名成績,輸出按成績排名後的同學名單。include using namespace std int main string k,name 20 fo...

帶姓名的多科成績單

用陣列string name表示同學們的姓名,使姓名與成績的下標保持一致。設計輸入成績的函式,輸入3科成績後可以自動求出總分,並將資料全儲存到陣列中 include includeconst int size 2 using namespace std void outputfun string n...