1、時間複雜度:
最優情況:o(n);
最壞情況:o(nlogn)
將待排序的序列分成若干子串行,並且每個子串行是有序的,再將每個子串行兩兩進行排序,合併,最終整體有序。
2、演算法步驟:
(1)先將序列拆分成兩個子串行;
(2)將兩個子串行之間進行排序,合成乙個;
(3)重複(1)(2)過程,進行遞迴,直至每個序列個數為1時,終止遞迴。
3、改進思想
(1)對於小陣列(長度小於一定值時),採取插入排序,處理速度上會有所提公升。
4、歸併排序實現**
/**
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
****
*****
* @file main.c
* @author haojiefenglang
* @date
5 august 2018
* @remark
5 august 2017
* @theme merge sort
****
****
****
****
****
****
****
****
****
****
****
****
****
****
*****
#include
#include
#define maxsize 10
void merging(int
*list1, int list1_size, int * list2, int list2_size);
//1、先拆再合
void mergesort(int a, int n)
}//實現歸併,並把結果放在list1中,並且因為list指向的是a,所以a也發生了改變;
void merging(int
*list1, int list1_size, int * list2, int list2_size)
; i = j = k = m = 0;
while (i < list1_size&&j < list2_size)
else
}//導致上述條件終止的情況有兩種,所以還有把每個子串行餘下的元素放入到temp中
while (i < list1_size)
while (j < list2_size)
for (m = 0; m
< (list1_size + list2_size); m++)
}int main()
; int n = 10;
mergesort(a, n);
printf("歸併排序後為: ");
for (int i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
return
0;}
歸併排序演算法實現
const int maxn 100 將陣列a的 l1,r1 與 l2,r2 區間合併為有序區間 此處l2即為r1 1 void merge int a,int l1,int r1,int l2,int r2 while i r1 temp index a i 將 l1,r1 剩餘元素加入temp ...
歸併排序演算法實現
關於歸併排序演算法的思想,網上有很多介紹,這裡不再解釋,這裡提供了乙個j a類,讀者可以把類潛入到自己的程式中,直接呼叫,免去了重新編寫歸併排序的過程。具體的j a 如下 1 import j a.util.2class mergesort 2021 public static void merge...
歸併排序演算法的實現
近期由於找工作,對歸併排序演算法也進行了一些研究,雖然網上有很多類似的演算法 實現,但是總是不太完整,閒來無聊對其他人的演算法 進行了一些整理,整理出了乙份完整的實現 感謝其他部落格的原創,也希望愛好程式設計的人能借鑑。下面是具體的 實現 include include 複製陣列 source 源陣...