排序演算法三歸併排序

2021-08-04 22:14:35 字數 1236 閱讀 1571

歸併排序(merge-sort)是利用歸併的思想實現的排序方法,該演算法採用經典的分治(divide-and-conquer)策略(分治法將問題分(divide)成一些小的問題然後遞迴求解,而治(conquer)的階段則將分的階段得到的各答案」修補」在一起,即分而治之)。

遞迴**實現:

void merge(int

array, int *temp, int left, int mid, int right)

while(start1 <= end1)

temp[index++] = array[start1++];

while(start2 <= end2)

temp[index++] = array[start2++];

}void mergesort(int *array, int *temp, int left, int right)

}void mergesort(int

array, int size)

非遞迴演算法:

**實現:

void merge(int

array, int *temp, int left, int mid, int right)

while(start1 <= end1)

temp[index++] = array[start1++];

while(start2 <= end2)

temp[index++] = array[start2++];

}void mergesort(int *array, int *temp, int size )

memcpy(array, temp, size*sizeof(array[0])); //這裡是歸併一趟完了,整個拷貝。如將整個gap=1歸併完了,拷貝

gap =gap*2;

}}void mergesort(int

array, int size)

時間複雜度為o(n*logn),沒有最好的情況和最壞的情況,空間複雜度為o(n),是乙個穩定的演算法。 比較次數與待排序記錄的初始化狀態無關。

外部排序。磁碟檔案排序

排序三(歸併排序)

其實和兩個有序單鏈表的排序有點相似,不斷劃分子區間,然後將每乙個有序的子區間兩兩進行合併 需要借助乙個額外的空間,將合併的區間拷下來 直到最後合成乙個區間,排序就完成了 其實歸併排序也稱外排序 對記憶體可以進行排序,對磁碟也可以進行排序 例如有這麼乙個題 要求排序100萬個數,這些數無法都載入到記憶...

排序演算法 歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。首先考慮下如何將將二個有序數列合併。這個非常簡單,只要從比較二個數列的第乙個數,誰小就先取誰,取了後就在對應數列中刪除這個數。然後再進行比較,如果有數列為空,那直接將另...

排序演算法 歸併排序

include include define status int define max 20 typedef struct elemtype typedef struct sqlist void inital sqlist l 初始化 bool lt int i,int j void merge ...