遞迴演算法雖然很方便但是相應的時間複雜度會提高
所以在此貼上非遞迴的詳細**
/*
* @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...