老規矩–妹妹鎮樓:
序列中共n個數,將序列兩兩分組,分為 [n / 2]個組,組內進行單獨排序,然後將這些組兩兩歸併,每兩個組合並成乙個組;於是生成了[n / 4]個組,組內依然單獨排序;重複同樣的操作,直到合併成乙個組為止。時間複雜度為o(nlogn)。
序列: 12 ,33, 32, 23, 55, 43, 23, 21, 55
1. 第一次歸併
得到5組:【12, 33】, 【32, 23】, 【55, 43】, 【23, 21】,
組內排序:【12, 33】, 【23, 32】, 【43, 55】, 【21, 23】,
2. 第二次歸併
兩兩歸併,得到3組:【12, 33, 23, 32】, 【43, 55, 21, 23】,
組內排序:【12,23, 32, 33】,【21, 23, 43, 55】,
3. 第三次歸併
得到2組:【12, 23, 32, 33, 21, 23, 43, 55】,
組內排序:【12, 21, 23, 23, 32, 33, 43, 55】,
4.第四次歸併
得到1組:【12, 21, 23, 23, 32, 33, 43, 55, 55】
組內排序:【12, 21, 23, 23, 32, 33, 43, 55, 55】
歸併排序,就是將兩個有序序列合併成乙個有序序列,並且需要不停地遞迴。將序列分為左右兩半,對兩個子區間分別遞迴歸併排序,然後合併兩個有序的子區間為有序序列即可。
const
int maxn =
100;
//歸併兩個區間[l1, r1], [l2, r2]
void
merge
(int a,
int l1,
int r1,
int l2,
int r2)
else
}while
(i <= r1)
while
(j <= r2)
for(
int i =
0; i < index;
++i)
}//用歸併排序乙個序列
void
mergesort
(int a,
int left,
int right)
}
排序演算法(六) 歸併排序
對於歸併排序,與快速排序一樣,巧妙的應用了分治演算法的核心思想,它將整個序列分成若干組子串行,對這些子串行進行排序後,在一步一步進行合併有序子串行,從而使得整個序列達到有序。但針對於歸併排序,有著兩種不同的排序方式,一是通過整個序列進行著手,將這個序列進行一步一步的劃分,自頂向下進行處理,主要步驟包...
排序演算法 六 歸併排序
歸併排序的基本思想是分治法。先將無序序列分為若干個無序子串行,然後對無序子串行進行排序,最後合併有序子串行,得到完全有序的序列。這就是分解,求解,合併的過程。將待排序序列data 0,1,2 n 1 看成是n個長度為一的序列,將相鄰序列進行合併,得到n 2個長度為2的有序序列 將相鄰序列再次進行合併...
排序演算法(六) 歸併排序
歸併排序 merge sort 又稱二路歸併排序,是指將乙個陣列一分為二,對每乙個子陣列遞迴排序,最後將排好的子陣列合併為乙個有序陣列的過程。歸併排序,是 分治法 應用的完美實現。1.歸併排序圖示 2.歸併排序流程 通過圖示,可以發現歸併排序一共只需要兩個步驟 3.實現 歸併排序的 邏輯還是很容易看...