第一步:申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列
第二步:設定兩個指標,最初位置分別為兩個已經排序序列的起始位置
重複步驟3直到某一指標超出序列尾
將另一串行剩下的所有元素直接複製到合併序列尾
歸併操作(merge),也叫歸併演算法,指的是將兩個順序序列合併成乙個順序序列的方法。
如 設有數列
初始狀態:6,202,100,301,38,8,1
第一次歸併後:,,,,比較次數:3;
第二次歸併後:,,比較次數:4;
第三次歸併後:,比較次數:4;
總的比較次數為:3+4+4=11;
逆序數為14;
具體**如下:
本題資料較大 應該用longlong
#include#include#include#includeusing namespace std;
#define inf 2000000000
const int max=100000;
typedef long long ll;
ll l[max/2],r[max/2];
ll n,ans=0;
ll a[max];
void merge(ll a,int left,int mid,int right)
歸併排序 51nod 1019 逆序數
後面的總結可能有錯誤的地方 發現請指出 畢竟 也是從別人呢裡搬的有 也有自己的總結!1019 逆序數 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱...
逆序數(51Nod1019) 歸併排序
1019 逆序數 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序數...
51Nod 1019 逆序數 歸併排序
1019 逆序數 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序數...