經典排序之 二路歸併排序

2022-06-22 03:12:09 字數 1130 閱讀 3921

今天最後研究一下二路歸併排序

演算法思想

利用遞迴,將原始序列不斷兩兩分塊,知道每塊剩下乙個元素,這個元素肯定是有序的。然後利用遞迴的原理合併即可;

二路歸併排序的最好,最壞,和平均時間複雜度為o(nlgn);是一種穩定的排序

演算法實現

1 #include2

using

namespace

std;34

void merge(int data, int low, int mid, int

high)514

15while(i <= mid && j <= high) //

順序選取兩個有序區的較小元素,儲存到t陣列中

1622

23while(i <= mid) //

若比較完之後,第乙個有序區仍有剩餘,則直接複製到t陣列中

24 temp[k++] = data[i++];

25while(j <= high) //

同上26 temp[k++] = data[j++];

27for(i=low, k=0; i <= high; i++, k++) //

將排好序的存回data中low到high這區間

28 data[i] =temp[k];

29delete [ ]temp; //

刪除指標,由於指向的是陣列,必須用delete 30}

3132

33void mergesort(int data, int low, int

high)

34 42}43

44int

main()45;

47 mergesort(x, 0, 7

);48

for(int i = 0; i < 8; i++)

49 cout<"";

50return0;

51 }

排序演算法之二路歸併排序

二路歸併排序是歸併排序中最簡單的一種,其演算法思想是假設有兩個有序的序列,然後將這裡兩個序列合併 為乙個序列,只要找這兩個序列中較小的元素即可,最後把剩下的元素複製出來。void mergearray int a,int first,int mid,int last,int temp int i f...

排序演算法之二路歸併排序

二路歸併排序是採用的分而治之的思想。將乙個待排序的序列分成兩個序列,分別對這兩個序列排序。而對於這兩個序列排序的方式也是還之前一樣,將這兩個序列分別分成兩個序列分別排序。一直這樣分割下去,知道序列中沒有元素或者已有乙個元素為止。因為沒有元素的序列和只有乙個元素的序列定是乙個有序的序列,所以相當於將這...

經典排序之二 快速排序 二路歸併

快速排序,顧名思義效率相比較其他排序方法高,它是一種交換排序 基本思路是 3 對左右兩個陣列做1,2操作,直至陣列裡只有乙個數值 function quicksort arr splice 方法向 從陣列中新增 刪除專案,然後返回被刪除的專案。會改變原陣列 方法對乙個數進行往下取整 小於等於x,且與...