C 歸併排序(注釋超詳細)

2021-08-16 17:49:35 字數 1562 閱讀 8227

c++歸併排序的實現

1、mergesort.h

/* 初始版本,公升序排序 */

/* 時間複雜度:o(nlbn) 將n個待排序記錄歸併次數為lbn,一趟歸併o(n)

空間複雜度:o(n) 遞迴棧最大深度為[lbn] + 1 ,而輔助陣列大小為n

穩定:無論最好還是最壞情況時間複雜度都是o(nlbn)

*/#ifndef mergesort_h

#define mergesort_h

void merge(int *arr, int n)

while(first < mid) // 將剩餘子串行複製到輔助序列中

temp[b++] = arr[first++];

while(second < n)

temp[b++] = arr[second++];

for (int i = 0; i < n; ++i)    // 輔助序列複製到原序列

arr[i] = temp[i];

}void mergesort(int *arr, int n)

}#endif // mergesort_h

2、main.cpp

#include #include #include "mergesort.h"

using namespace std;

#define max 10           // 隨機數的最大數

#define min 1            // 隨機數的最小數

#define maxsize 10       // 陣列大小

#define sorttimes 20     // 隨機生成陣列並進行排序的次數

int main(int argc, char *argv)

std::cout << std::endl;

mergesort(arr, maxsize);            // 排序

std::cout << "\t ==> \t";

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

std::cout << arr[i] << " ";

std::cout << std::endl;}}

測試結果:

如果想看函式歸併過程可以這樣:更改mergesort

排序不得不看之:c++堆排序的實現(超詳細)

排序不得不看之:c++快速排序的實現(注釋超詳細)

歸併排序C 實現,詳細注釋

歸併排序,它採取分而治之 divide and conquer 的策略,時間複雜度是 nlgn 歸併排序的步驟如下 divide 把長度為n的輸入序列分成兩個長度為n 2的子串行。conquer 對這兩個子串行分別採用歸併排序。combine 將兩個排序好的子串行合併成乙個最終的排序序列。在描述歸併...

歸併排序詳細解析

我們先來乙個兩個有序的陣列a和b進行排序的 兩個有序的陣列進行排序只需每次選擇兩個陣列中最小的那個數放進c中就ok了,之後如果那個陣列還有剩餘就將其直接接在c後面。時間效率還是很快的達到了o n python原始碼 def memeryarray a,b,c i 0 j 0 k 0 n len a ...

5 歸併排序(詳細)

目錄 sort類在選擇排序中的約定中 歸併排序的思想是將陣列分成兩部分,分別進行排序,然後歸併起來。歸併方法將陣列中兩個已經排序的部分歸併成乙個。算是乙個輔助方法把,下面不管哪種歸併排序都會用到 public abstract class mergesort comparable extends s...