演算法積累 2 歸併排序非遞迴的實現

2021-07-10 12:54:44 字數 747 閱讀 5007

遞迴演算法雖然很方便但是相應的時間複雜度會提高

所以在此貼上非遞迴的詳細**

/*

* @author: katherine-qj

* @date: 2016-03-15 20:54:29

* @last modified by: katherine-qj

* @last modified time: 2016-03-15 21:30:05

*/#include

#include

void merge(int x,int low,int mid, int high)

while(i<=mid)//若比較完之後,第乙個有序區仍有剩餘,則直接複製到t陣列中

temp[k++]=x[i++];

while(j<=high)//同上

temp[k++]=x[j++];

for(i=low,k=0;i<=high;i++,k++)//將排好序的存回arr中low到high這區間

x[i]=temp[k];

free(temp);

} void massgersort(int x,int n)

size*=2;//範圍擴大一倍

}}int main() ;

massgersort(x,5);

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

getchar();

return

0;}

歸併排序 非遞迴實現

我們知道,遞迴實現的缺點就是會一直呼叫棧,而棧記憶體往往是很小的。所以,我們嘗試著用迴圈的辦法去實現歸併排序。之氣提到過,歸併排序的基本思路是將待排序序列r 0 n 1 看成是n個長度為1的有序序列,將相鄰的有序表成對歸併,得到n 2個長度為2的有序表 將這些有序序列再次歸併,得到n 4個長度為4的...

歸併排序 非遞迴實現

1 歸併,非遞迴實現 1 段長度倍增,1,2,3,4,8,n 當要合併的單段長 2 以兩段的長度作為每次偏移的長度 每次合併是兩個單段一組進行合併,因此要不斷地偏移兩個單段的長度。5 3 5 2 8 7 2 3 5 7 8 include include include using namespac...

歸併排序的遞迴,非遞迴實現

和選擇排序一樣,歸併排序的效能不受輸入資料的影響,但表現比選擇排序好的多,因為始終都是o n log n 的時間複雜度。代價是需要額外的記憶體空間,o n 的額外空間。該演算法是採用分治法 歸併排序是一種穩定的排序方法。將已有序的子串行合併,得到完全有序的序列 public int mergesor...