關於歸併排序和逆序對

2021-08-28 06:01:22 字數 1042 閱讀 3296

今天學習了歸併排序和逆序對,逆序對經過多次測試才成功,所以傳上來以作紀念,新手創作,不喜勿噴

歸併排序:

public static void mergesort1(int  arrs)

mergesort1(arrs,0,arrs.length-1); }

public static void mergesort1(int arrs,int l,int r)

int mid = l +((r-l)>>1);//等價於 l+((r-l)/2)保證不會溢位

mergesort1(arrs,l,mid);

mergesort1(arrs,mid+1,r);

merge(arrs,l,mid,r); }

public static void merge(int arrs,int l,int m,int r)

//以下兩個while語句,只會執行乙個,將較長的另一邊剩下的陣列全部拷貝進去

while(p1<=m)

while(p2<=r)

//將排好序的陣列拷貝給原陣列

for(i=0;i逆序對的:

public static void mergesoft(int arrs)

mergesoft(arrs,0,arrs.length-1);

} public static void mergesoft(int arrs,int l,int r)

int mid = l+((r-l)>>1);

mergesoft(arrs,l,mid);

mergesoft(arrs,mid+1,r);

merge(arrs,l,mid,r); }

public static void merge(int arrs,int l,int m,int r)

}temp[i++] = arrs[p1] > arrs[p2] ? arrs[p2++] : arrs[p1++];

}while(p1<=m)

while(p2<=r)

for(i=0;i}

關於歸併排序

暑假集訓的時候就有接觸到歸併排序,但是當時並沒什麼好好地去學習。開學之後資料結構老師提了好幾次歸併排序,我發現模板 我已經忘的一乾二淨了。於是這兩天重新學了一遍。所謂歸併排序,就是將兩個排好序的序列歸併在一起,形成乙個新序列。那麼,如何得到排好序的序列呢,這裡就體現了分治的思想。我們可以將乙個序列,...

關於歸併排序

我只能說看懂歸併排序,你的遞迴思想會再有乙個昇華。其實在之前我做過一道演算法題,用到的就是這種兩個遞迴在一起。馮諾依曼可真是智慧型。我之所以寫成1,2,3,4,3 2 1 根源還是在於遞迴。在重複一句當初我理解遞迴時的最精闢的一句話 在遞迴中的return,不是結束,而是返回它的被調函式。也就是說,...

逆序對 (歸併排序)

逆序對的nlogn方法,改進後的歸併排序 給定排列p,求排列的逆序對數量。p的長度 100000。要求o nlogn 定義歸併排序過程merge l,r merge l,r merge l,mid merge mid 1,r count l,mid,mid 1,r 只需要考慮左右兩段之間造成的逆序對...