天天看點

846. 多關鍵字排序

描述

給定 

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;
    }
};