歸併排序演算法

2021-07-25 03:33:17 字數 1079 閱讀 1665

這是一種非常高效的排序演算法,使用到了遞迴的思想,就演算法複雜度而言,和快排是相當的,某些時候,甚至比快排更合適,更高效。

如果能夠實現將兩個有序陣列歸併成乙個有序陣列,那麼可以將4個8個16個n個有序陣列歸併成乙個有序陣列,那麼對於length為n的陣列,也就是n個元素為length為1的有序陣列,對其歸併也可實現排序,那麼如何歸併兩個有序陣列呢,或者說,如果乙個陣列分別實現了前後兩個部分的有序,如何實現整個陣列有序?

private comparable aux = new comparable[arr.length];//臨時容器

/** * arr[low]-arr[mid],arr[mid+1]-arr[high]分別有序,

* 實現arr[low]-arr[high]有序

*/private

void

merge(comparable arr, int low, int mid, int high)

for(int k = low; k <= high; k++)

}

如果乙個陣列,前半部分和後半部分分別有序,那麼可以對陣列的兩部分順序進行歸併,使整個陣列有序。

為了實現乙個陣列的前半部分有序,那麼需要實現它(前半部分)的前後兩個部分分別有序,進行歸併之後,它可以實現有序。

…… 對,這是乙個遞迴。

public

void

sort(comparable arr)

public

void

sort(comparable arr, int low, int high)

對於乙個無序的陣列,其前兩個元素可以看做是陣列中有序的兩部分,三四個同理…前兩個可以歸併為乙個有序的部分,三四個可以歸併為乙個有序的部分,這兩個部分也可以歸併為乙個有序的部分,最終前四個元素成為有序的一部分,同理,整個陣列也可以歸併為乙個有序的部分,即實現排序

public

void

sort(comparable arr)

}

演算法中應用遞迴,可以有效地比較與交換,歸併排序對於部分有序的陣列來說,非常高效。

歸併演算法 歸併排序

歸併演算法 歸併排序 這周需要用到歸併演算法,於是找了找相關的資料,整理如下 歸併排序 merge sort 是利用 歸併 技術來進行排序。歸併是指將若干個已排序的子檔案合併成乙個有序的檔案。兩路歸併演算法 1 演算法基本思路 設兩個有序的子檔案 相當於輸入堆 放在同一向量中相鄰的位置上 r low...

歸併排序演算法

include stdafx.h include include include 合併兩段已經排好序的列表 void merge int list int mergelist int left int mid int right else if i mid else 將列表list按照seglen分...

歸併排序演算法

這個演算法感覺比插入難理解一些,下面說說我的理解 歸併排序的步驟 1.把長度為n的序列分為兩個長度為n 2的子串行 2.對這兩個子串行分別採用歸併排序 3.將兩個子串行合併成乙個最終的排序序列 通過步驟2可看到 在歸併排序中又用了歸併排序,可見這是乙個遞迴的過程。例如乙個陣列 a 8 下面採用遞迴排...