歸併排序詳解C

2021-10-08 19:51:53 字數 1547 閱讀 7613

歸併排序是用分治思想,分治模式在每一層遞迴上有三個步驟:

2.1 迭代法

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

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

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

④ 重複步驟③直到某一指標到達序列尾

⑤ 將另一串行剩下的所有元素直接複製到合併序列尾

2.2 遞迴法

① 將序列每相鄰兩個數字進行歸併操作,形成floor(n/2)個序列,排序後每個序列包含兩個元素

② 將上述序列再次歸併,形成floor(n/4)個序列,每個序列包含四個元素

③ 重複步驟②,直到所有元素排序完畢

// leetxodetest.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include #include#include#include#include < unordered_map >

using namespace std;

typedef int elemtype;

void merge(elemtype *r, elemtype *rf, int i, int m, int n);

void print(int a, int n);

void mergesort(elemtype *r, elemtype *rf, int lenght);

int _tmain(int argc, _tchar* ar**)

; int b[10];

mergesort(a, b, 10);

print(b, 10);

cout << "結果:";

print(a, 10);

/ system("pause ");

return 0;

}void merge(elemtype *r, elemtype *rf, int i, int m, int n)

while (i <= m) rf[k++] = r[i++];

while (j <= n) rf[k++] = r[j++];

print(rf, n + 1);

}void print(int a, int n){

for (int j = 0; j1.歸併排序,是建立在歸併操作上的一種有效的排序演算法。演算法是採用分治法(divide and conquer)的乙個非常典型的應用,且各層分治遞迴可以同時進行。歸併排序思路簡單,速度僅次於快速排序,為穩定排序演算法,一般用於對總體無序,但是各子項相對有序的數列。

2.複雜度分析

平均時間複雜度:o(nlogn)

最佳時間複雜度:o(n)

最差時間複雜度:o(nlogn)

空間複雜度:o(n)

排序方式:in-place

穩定性:穩定

歸併排序詳解

一.概念 歸併是指將若干個已排序的子檔案合併成乙個有序的檔案。二.基本思路 設兩個有序的子檔案 相當於輸入堆 放在同一向量中相鄰的位置上 r low.m r m 1.high 先將它們合併到乙個區域性的暫存向量r1 相當於輸出堆 中,待合併完成後將r1複製回r low.high 中。合併過程中,設定...

歸併排序詳解

歸併排序的核心思想是將兩個已經排序的序列合併成乙個序列,那如何得到兩個已經排序的序列呢?我們知道,如果乙個序列只有乙個元素,那該序列是已經排序的,這樣我們就可以利用分治的思想,將未排序的序列劃分成更小的序列,只到我們可以很方便的對小序列進行排序 比如劃分到序列只有乙個元素,或者序列很小可以方便的使用...

歸併排序 詳解

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用,歸併排序將兩個已排序的表合併成乙個表。優點1.歸併排序的效率達到了巔峰 時間複雜度為o nlogn 這是基於比較的排序演算法所能達到的最高境界 2.歸併排序是一種穩定的...