快排不僅利用一種元素進行排序,例如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...