歸并排序の分而治之

歸并排序可以說是分治法的一個很形象的實例

歸并排序與快排不同的是绽族,歸并排序重點在整合姨涡,簡單的說把相對分區(qū)有序而內(nèi)部

元素亂序的兩區(qū)通過歸并整合成有序的序列。

歸并思路(分治法):

分解:將n個元素一刀從中間分成兩個序列

遞歸:將子序列遞歸的進行分區(qū)劃分

解決:合并兩個子序列(歸并排序的重點)

歸并排序的合并(以空間換時間):

申請額外的和原數(shù)組大小相同的輔助空間吧慢,將原數(shù)組元素copy到輔助空間中

定義兩個指針:left right 涛漂,其中l(wèi)eft指向輔助空間頭(第一區(qū)的頭),right指向輔助空間中間元素下一個(第二區(qū)的頭)比較大小,每次將小的元素覆蓋到原數(shù)組匈仗,并且該指針后移

(Java代碼示例)

public class MergeSort {

private static int[] helper;//輔助數(shù)組

public static void main(String[] args) {

int[] a = {5,15,8,20,6};

printArray(a);

sort(a);

printArray(a);

}

static void sort(int[] a) {

helper = new int[a.length];

mergeSort(a, 0, a.length - 1);

}

/**

*

* @param arr 待排序數(shù)組

* @param p 低位

* @param r 高位

*/

static void mergeSort(int[] arr, int p, int r) {

if(p < r) {

int mid = p + ((r - p)>>1);

mergeSort(arr, p, mid);//左側(cè)排序

mergeSort(arr, mid+1, r);//右側(cè)排序

merge(arr, p, mid, r);

}

}


static void printArray(int[] arr){

for(int i : arr){

System.out.print(i + " ");

}

System.out.println();

}

/**

*

* @param arr 待合并數(shù)組

* @param p 低位

* @param mid 中間位置

* @param r 高位

*/

static void merge(int[] arr, int p, int mid, int r) {

//arr中的數(shù)據(jù)拷貝到helper中

System.arraycopy(arr, p, helper, p, r-p+1);

//輔助數(shù)組的兩個指針

int left = p;

int right = mid + 1;

//原始數(shù)組的指針

int current = p;

while(left <= mid&&right <= r) {

if(helper[left] <= helper[right]) {

arr[current] = helper[left];

current++;

left++;

}else {

arr[current] = helper[right];

current++;

right++;

}

}

while(left <= mid) {//左邊沒有到頭,右邊不到頭也可以

arr[current] = helper[left];

current++;

left++;

}

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓢剿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子悠轩,更是在濱河造成了極大的恐慌间狂,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件火架,死亡現(xiàn)場離奇詭異鉴象,居然都是意外死亡,警方通過查閱死者的電腦和手機何鸡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門纺弊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人音比,你說我怎么就攤上這事俭尖。” “怎么了洞翩?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵稽犁,是天一觀的道長。 經(jīng)常有香客問我骚亿,道長已亥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任来屠,我火速辦了婚禮虑椎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘俱笛。我一直安慰自己捆姜,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布迎膜。 她就那樣靜靜地躺著泥技,像睡著了一般。 火紅的嫁衣襯著肌膚如雪磕仅。 梳的紋絲不亂的頭發(fā)上珊豹,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音榕订,去河邊找鬼店茶。 笑死,一個胖子當(dāng)著我的面吹牛劫恒,可吹牛的內(nèi)容都是我干的贩幻。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼段直!你這毒婦竟也來了吃溅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤鸯檬,失蹤者是張志新(化名)和其女友劉穎决侈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喧务,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡赖歌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了功茴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庐冯。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖坎穿,靈堂內(nèi)的尸體忽然破棺而出展父,到底是詐尸還是另有隱情,我是刑警寧澤玲昧,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布栖茉,位于F島的核電站,受9級特大地震影響孵延,放射性物質(zhì)發(fā)生泄漏吕漂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一尘应、第九天 我趴在偏房一處隱蔽的房頂上張望惶凝。 院中可真熱鬧,春花似錦犬钢、人聲如沸苍鲜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坡贺。三九已至,卻和暖如春箱舞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拳亿。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工晴股, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肺魁。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓电湘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子寂呛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

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

  • 7種常用的排序算法總結(jié) 2016.04.30PoetryAlgorithm 排序算法:一種能將一串?dāng)?shù)據(jù)依照特定的排...
    raining_804f閱讀 784評論 0 0
  • 離別最是痛苦怎诫,無論人事。以前總期盼著一期一會般的美麗和純粹贷痪,可每當(dāng)臨時幻妓,卻又抑制不住自己的想將美好多留一分的念想,...
    0a38a95e04e8閱讀 113評論 0 0
  • 談到糖尿病呀妹沙!大家的第一反應(yīng)就是控制好血糖吧,那真的是只要血糖達標(biāo)就是萬事大吉了么熟吏? 當(dāng)然不是距糖。 其實在糖尿病的治...
    脂老虎私人減脂管理師閱讀 196評論 0 0