2_13小范圍排序

已知一個幾乎有序的數(shù)組,幾乎有序是指忘巧,如果把數(shù)組排好順序的話饶米,每個元素移動的距離可以不超過k桨啃,并且k相對于數(shù)組來說比較小。請選擇一個合適的排序算法針對這個數(shù)據(jù)進行排序檬输。

給定一個int數(shù)組A优幸,同時給定A的大小n和題意中的k,請返回排序后的數(shù)組褪猛。

測試樣例:
輸入:[2,1,4,3,6,5,8,7,10,9],10,2
返回:[1,2,3,4,5,6,7,8,9,10]

class ScaleSort {
public:
    void swap(vector<int> &A, int i, int j)
    {
        int tmp = A[i];
        A[i] = A[j];
        A[j] = tmp;
    }

    // 調(diào)整堆,adjusting_node羹饰,是當前待調(diào)整的節(jié)點
    void adjust_heap(vector<int> &A, int adjusting_node, int last_node)
    {
       int parent =  adjusting_node, child = 2 * adjusting_node + 1;
       int curr_value = A[adjusting_node];
       while(child <= last_node){
           if(child < last_node && A[child] > A[child+1]){
               ++child;
           }
           if(curr_value > A[child]){
               A[parent] = A[child];
               parent = child;
               child = 2*parent + 1;
           }
           else{
               break;
           }
       }
       A[parent] = curr_value;
    }

    vector<int> sortElement(vector<int> A, int n, int k) {
        // write code here
        if (n < k){
            return A;
        }
        // 初始化大小為K的最小堆伊滋,由A的前K個元素組成
        vector<int> heap(A.begin(), A.begin()+k);
        for(int i=k/2-1; i>=0; i--){
            adjust_heap(heap, i, k-1);
        }
        // 對錢n-k個數(shù)進i行排序
        int idx = k;
        while(idx<=n-1){
            A[idx - k] = heap[0];
            heap[0] = A[idx];
            adjust_heap(heap, 0, k-1);
            ++idx;
        }
        // 對剩下的n-k個數(shù)進行排序
        for(int i=k-1; i>=0; i--){
            A[idx - k] = heap[0];
            ++idx;
            heap[0] = heap.back();
            heap.pop_back();
            adjust_heap(heap, 0, heap.size()-1);
        }
        return A;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市队秩,隨后出現(xiàn)的幾起案子笑旺,更是在濱河造成了極大的恐慌,老刑警劉巖馍资,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筒主,死亡現(xiàn)場離奇詭異,居然都是意外死亡鸟蟹,警方通過查閱死者的電腦和手機乌妙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來建钥,“玉大人藤韵,你說我怎么就攤上這事⌒芫” “怎么了泽艘?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長镐依。 經(jīng)常有香客問我匹涮,道長,這世上最難降的妖魔是什么槐壳? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任然低,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脚翘。我一直安慰自己灼卢,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布来农。 她就那樣靜靜地躺著鞋真,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沃于。 梳的紋絲不亂的頭發(fā)上涩咖,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音繁莹,去河邊找鬼檩互。 笑死,一個胖子當著我的面吹牛咨演,可吹牛的內(nèi)容都是我干的闸昨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼薄风,長吁一口氣:“原來是場噩夢啊……” “哼饵较!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起遭赂,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤循诉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后撇他,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茄猫,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年困肩,在試婚紗的時候發(fā)現(xiàn)自己被綠了划纽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡锌畸,死狀恐怖阿浓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蹋绽,我是刑警寧澤芭毙,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站卸耘,受9級特大地震影響退敦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蚣抗,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一侈百、第九天 我趴在偏房一處隱蔽的房頂上張望瓮下。 院中可真熱鬧,春花似錦钝域、人聲如沸讽坏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽路呜。三九已至,卻和暖如春织咧,著一層夾襖步出監(jiān)牢的瞬間胀葱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工笙蒙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抵屿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓捅位,卻偏偏與公主長得像轧葛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子艇搀,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 該文章總結(jié)自牛課網(wǎng)的在線算法課程(https://www.nowcoder.com/) 經(jīng)典排序算法就是前面講那幾...
    鍋與盆閱讀 7,715評論 6 14
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗尿扯。 張土汪:刷leetcod...
    土汪閱讀 12,747評論 0 33
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,238評論 0 4
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序中符,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,188評論 0 52
  • 概述:排序有內(nèi)部排序和外部排序誉帅,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序淀散,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,733評論 0 15