歸併排序:(時間複雜度o(n*lg(n)))
思想:把陣列劃分為兩段區間,假設兩段區間都有序,則合併的區間也有序。
步驟:申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列
設定兩個指標,最初位置分別為兩個已經排序序列的起始位置
比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置
重複步驟3直到某一指標達到序列尾
**:
sort.h
#pragma once
//[left,right]
void _mergesort(int* a, int left, int right, int* tmp)
else
}while (begin1 <= end1)
while (begin2 <= end2)
memcpy(a + left, tmp + left, sizeof(int)*(right - left + 1));
}void mergesort(int* a, size_t n)
void testmergesortt()
; mergesort(a,sizeof(a) / sizeof(a[0]));
printarray(a, sizeof(a) / sizeof(a[0]));
}
test.cpp
#include
#include
using
namespace
std;
#include"sort.h"
int main()
排序演算法 歸併
歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。歸併過程 比較...
排序演算法之歸併演算法
歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。歸併的基本思想...
歸併演算法 歸併排序
歸併演算法 歸併排序 這周需要用到歸併演算法,於是找了找相關的資料,整理如下 歸併排序 merge sort 是利用 歸併 技術來進行排序。歸併是指將若干個已排序的子檔案合併成乙個有序的檔案。兩路歸併演算法 1 演算法基本思路 設兩個有序的子檔案 相當於輸入堆 放在同一向量中相鄰的位置上 r low...