排序演算法6 歸併排序

2021-10-25 06:57:47 字數 1381 閱讀 2397

1.什麼是歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。將已有序的子

序列合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為2-路歸併。

2.演算法步驟

1.把長度為n的輸入序列分成兩個長度為n/2的子串行;

2.對這兩個子串行分別採用歸併排序;

3.將兩個排序好的子串行合併成乙個最終的排序序列(此步驟需要開闢另外的記憶體空間).

3. 例項說明演算法思想

4.**說明歸併排序的過程

5.**演示

/*

檔名:mergesort.c

編碼目的:歸併排序

測試環境:mircosoft visual studio professional 2015 版本14.0.25431.01 update3

版本資訊:ver1.0

*/#include #include #include #include #include #define max 5000000

long getsystemtime()

// 建立陣列

int *createarray()

return arr;

}void printarr(int arr, int length)

printf("\n");

}// 合併演算法

void merge(int arr, int start, int end, int mid, int* tmp)

else

} // i這個序列還有剩餘元素

while (i_start <= i_end)

// j這個序列還有剩餘元素

while (j_start <= j_end)

// 輔助空間的資料覆蓋到原來空間

for (int i = 0; i < length; i++) }

// 歸併排序

void mergesort(int arr,int start,int end,int* temp)

int main()

6.**測試結果

排序 6 歸併排序

參考 排序 0 前言 將序列分為若干個子串行 子串行均有序 兩兩子串行進行歸併操作,得到乙個新的有序列表,最終歸併所有子串行,得到乙個遞增或遞減的序列 從左到右逐個比較兩個子串行中的元素大小,比如進行遞增排序,將較小的元素加入結果序列中,其下標加1,繼續和另乙個序列元素進行比較,直到某乙個序列元素已...

6 歸併排序

歸併排序是歸併兩個有序的序列,這兩個有序序列需要頭尾兩個指標,遍歷這兩個序列,按照排序規則儲存在乙個可以容納這兩個序列的序列中,當遍歷結束,則新的序列為有序序列。當我們需要對某一串行排序時,可以把該序列分成兩半,分別對這兩半進行排序,然後歸併這兩個有序序列。而這兩半又可以遞迴地分半,類似二分法。in...

6 歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。nlogn 由於需要兩兩比較 因此也是穩定的!首先考慮下如何將將二個有序數列合併。這個非常簡單,只要從比較二個數列的第乙個數,誰小就先取誰,取了後就在對應數列中刪除這個...