雙棧排序

題目:

請編寫一個程序,按升序對棧進行排序(即最大元素位於棧頂),要求最多隻能使用一個額外的棧存放臨時數據,但不得將元素複製到別的數據結構中。

給定一個int[] numbers(C++中爲vector&ltint>),其中第一個元素爲棧頂,請返回排序後的棧。請注意這是一個棧,意味着排序過程中你只能訪問到第一個元素。

思路:



代碼實現:

class TwoStacks {
public:
    vector<int> twoStacksSort(vector<int> numbers) {
        // write code here
        if(numbers.size() == 0 || numbers.size() == 1)
            return numbers;
        vector<int> result;
        int tmp;
        result.push_back(numbers.back());
        numbers.pop_back();
        while(!numbers.empty())
        {
            tmp = numbers.back();
            numbers.pop_back();
            while(tmp < result.back())
            {
                numbers.push_back(result.back());
                result.pop_back();
            }
            result.push_back(tmp);
        }
        while(!result.empty())
        {
            numbers.push_back(result.back());
            result.pop_back();
        }
        return numbers;
    }
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章