排序演算法 歸併排序演算法的實現

2021-08-22 07:20:47 字數 1720 閱讀 6307

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 源陣...