使用語言:c語言,編譯器visual studio 2017
一.基本思想
從上到下的歸併排序的基本思想主要分成三步。(1)分解:將序列大致分成長度相等的兩部分,再運用遞迴使其越分越細,直到分成單個元素;(2)排序:根據大小關係將相鄰兩個元素排好序;(3)合併:將兩個有序序列合成乙個有序序列,直到合成完整的序列。
圖例:
二.**實現
#include#includevoid merge(int array,int start,int mid,int end)
else
} while (i <= mid)
while (j <= end)
for (i = 0; i < k; i++)
free(temp);
}void mergesort(int array, int start, int end)
int main() {
int array[100];
int i = 0;
int num = 0;
printf("請輸入待排序的數字個數:\n");
scanf_s("%d", &num);
printf("請輸入%d個數字:\n", num);
for (i; i三.時間複雜度分析
假設函式mergesort需要時間t(n)。因為merge()函式的時間複雜度為o(n),所以t(n)=2t(n/2)+o(n)。推導得時間複雜度均為o(nlogn)。或者這麼理解:歸併排序的形式就是一棵二叉樹,它需要遍歷的次數就是二叉樹的深度,而根據完全二叉樹的可以得出它的時間複雜度是o(n*logn)。
四 歸併排序 非比較排序 歸併排序 計數排序
基本思想 歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有 序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。歸...
內部排序(四)歸併排序
總述 歸併排序 merging sort 中歸併是將兩個或兩個以上的有序表組合成乙個新的有序表。歸併排序我們主要 2 路歸併排序。2 路歸併排序 過程 假設初始序列含有n個記錄,則可看成是n個有序的子串行,每個子串行的長度為1,然後兩兩歸併,得到ceil n 2 個長度為2或1的有序子串行 再兩兩歸...
排序演算法(四) 歸併排序
合併排序也即歸併排序,是將兩個或兩個以上的有序表合併成乙個新的有序表的操作,是分治法的乙個典型應用。先使每個子串行有序 段內有序 再使子串行段間有序,最後合併後得到完全有序的序列。歸併排序可以使用遞迴實現,遞迴的條件是序列起始位置 startindex 小於序列結束位置 endindex 即序列元素...