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