排序 歸併排序

2021-07-29 15:45:09 字數 1118 閱讀 4450

歸併排序是典型的分治演算法的例子,即先使每個子串行有序,再使子串行段間有序

歸併排序的時空複雜度

1、歸併排序的時間複雜度

歸併排序的平均時間效能o(nlogn) 。

2、歸併排序的空間複雜度

歸併排序的空間複雜度為:o(n)。

演算法思想

歸併排序的演算法我們通常用遞迴實現,先把待排序區間[s,t]以中點分,接著把左邊子區間排序,再把右邊子區間排序,最後把左區間和右區間用一次歸併操作合併成有序的區間[s,t]。

一趟歸併的操作如下:

第一步:申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列

第二步:設定兩個指標,最初位置分別為兩個已經排序序列的起始位置

第三步:比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置

重複步驟3直到某一指標超出序列尾

演算法示意圖:

自己的**實現:

#include 

int num1[10000];

int num2[10000];

void copy(int left,int right);

void merge(int left,int m,int right);

void mergesort(int left,int right);

int main()

void mergesort(int left,int right)

}void merge(int left,int m,int right)

int q;

if(i > q)

for(q = j;q <= right;q++ )

num2[k++] = num1[q];

else

for(q = i;q <= m;q++)

num2[k++] = num1[q];

}void copy(int left,int right)

}

排序 歸併排序

歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併 將兩個已經排好序的集合合併到乙個集合眾,並且保證新的集合也是有序的。核心點 只有乙個元素的集合是已經排好序的集合。歸併排序是建立在...

排序 歸併排序

歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。2 路歸併演算法 1.演算法基本思路 設兩個有序的子檔...

排序 歸併排序

利用遞迴的思想,當n 1時,只有乙個元素需要排序,為遞迴臨界條件 否則,遞迴的將前半部分資料和後半部分資料各自歸併排序,得到排序後的兩部分資料,然後再將得到的兩部分合併到一起。mergesort algorithm public void mergesort int data mergesort例程...