[華爲模擬筆試]長度爲n的數組亂序存放着0至n-1. 現在只能進行0與其他數的交換,完成數組排序

問題描述:長度爲n的數組亂序存放着0至n-1. 現在只能進行0與其他數的交換,完成數組排序

思路:由於亂序數組各元素亮亮不同,且已知數組內容即爲0-(n-1),所以只要考慮將0-(n-1)這n個數依次填入數組array即可。一個簡單的思路是,由於數組最終內容是array[i]=i,考慮將0與數組第i個位置互換,然後將0與i互換,則i填入位置array[i].

代碼:

/**
 * 交換數組裏n和0的位置
 * array: 存儲[0-n)的數組
 * len: 數組長度
 * n: 數組裏要和0交換的數
 */
extern void swap_with_zero(int* array, int len, int n);

class Solution {
public:
    /**
     * 調用方法swap_with_zero來對array進行排序
     */
    void sort(int* array, int len) {
        for(int i = len - 1; i > 0 ;i--){
            swap_with_zero(array,len,array[i]);
            swap_with_zero(array,len,i);
        }
    }
};

 

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