描述
給定
n
個學生(
1
到
n
編号)以及他們的考試成績,這裡有兩個關鍵字,考試成績以及學生學号。根據第一關鍵字對數組進行排序(
降序
),如果第一關鍵字相同則根據第二關鍵字進行排序(
升序
).
您在真實的面試中是否遇到過這個題? 是
樣例
給出
[[2,50],[1,50],[3,100]]
,
傳回
[[3,100],[1,50],[2,50]]
其實這道題有一個潛在的已經排序的隊列,就是編号1-n。而在所有排序算法中,有相同值但不改變相對位置的,第一反應是冒泡排序。是以我的思路是,先根據n排序再冒泡排序。
class Solution {
public:
/**
* @param array: the input array
* @return: the sorted array
*/
vector<vector<int>> multiSort(vector<vector<int>> &array) {
// Write your code here
for(int i=0;i<array.size();i++){
if(array[i][0]!=i+1) {
swap(array[i],array[array[i][0]-1]);
i--;
}
}
for(int i=0;i<array.size()-1;i++){
for(int j=0;j<array.size()-1;j++){
if(array[j][1]<array[j+1][1])
swap(array[j],array[j+1]);
}
}
return array;
}
void swap(vector<int> &A,vector<int> &B){
vector<int> tmp=A;
A=B;
B=tmp;
}
};