描述
给定 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;
}
};