歸併排序是一種高效的排序演算法(時間複雜度(o(nlogn))),按照分治三步法,對歸併排序演算法介紹如下:
劃分問題: 把序列分成元素個數盡量相等的兩半
遞迴求解:把兩半元素分別排序。
合併問題:把兩個有序表合併成乙個
(我之前看都沒有看過歸併排序這麼簡潔的**,包括在書上)
歸併好處:高效(思想也很重要)
缺點:需要輔助儲存空間。
#include"stdio.h"
#include"stdlib.h"
#include"algorithm"
#include"math.h"
using namespace std;
const int maxn=50005;
int data[maxn];
int tmp[maxn];
int cnt=0;
void merge_sort(int data,int left,int right,int tmp)
// 閉合區間[left,right]
{ if(right>left) //至少有乙個元素
{ int m=left+(right-left)/2; //劃分
merge_sort(data,left,m,tmp); //遞迴求解
merge_sort(data,m+1,right,tmp);//遞迴求解
int le=left,ri=m+1;
int i=left;
while(le<=m||ri<=right) //合併求解
{ if(ri>right||(le<=m)&&(data[le]
上面**除了歸併排序之外,還增加了求逆序對,這便是歸併排序的直接應用了。
分治法,歸併排序
1.時間複雜度為o nlog n 非降序 package com.cn.insertion 歸併排序,採用分治法的策略 author administrator public class merge sort mergesort a,0,9 for int i 0 i a.length i 先分在和...
分治法(歸併排序)
分治法.cpp 定義控制台應用程式的入口點。include stdafx.h include include include define max 30 using namespace std int l max int r max void merge int a,int p,int q,int ...
分治法 歸併排序
歸併排序是分治法的典型應用,思想如下 divide divide the array to 2 subarray conquer reverse in 2 subarray,if only one elem return combine merge two ordered subarray t n ...