逆序對《演算法很美》
逆序對
不懂歸併的可以,看我之前的文章
思路: 歸併排序的基礎上,加上static int niXu = 0;
記住遞迴是歸併,兩兩歸併,兩兩比對的,是拆分了的。niXu是內部進行比對相加的。
具體思路:
- {9,9,6,7,5,4,2,2,1}
- 9和{5,4,2,2,1} 9大於5、4、2、2、1 niXu = 5;
- 9和{5,4,2,2,1} 9大於5、4、2、2、1 niXu = 5;
- 6和{5,4,2,2,1} 6大於5、4、2、2、1 niXu = 5;
- 7和{5,4,2,2,1} 7大於5、4、2、2、1 niXu = 5;
- 5和{4,2,2,1} 5大於4、2、2、1 niXu = 4;
- 4和{2,2,1} 4大於2、2、1 niXu = 3;
- 2和{2,1} 2大於2、1 niXu = 2;
- 2和{1} 2大於1 niXu = 1;
public class 逆序對 {
public static int[] helper;
static int niXu = 0;
public static void sort(int[] arr){
helper = new int[arr.length];
sort(arr, 0, arr.length - 1);
}
public static void sort(int[] A,int p,int r){
if(p < r){
int mid = p+((r-p)>>1);
sort(A, p, mid); //對左側排序
sort(A,mid+1, r); //對右側排序
merge(A, p, mid, r); //合併
}
}
public static void merge(int[] A,int p,int mid,int r){
//拷貝到輔助空間的相同位置
System.arraycopy(A, p, helper, p, r - p + 1);
//輔助陣列的兩個指標
int left = p;
int right = mid + 1;
//原始陣列的指標
int current = p;
while(left <= mid && right <= r){
if(helper[left] <= helper[right]){
A[current++] = helper[left++];
}else{ //右邊小
A[current++] = helper[right++];
niXu=niXu+mid-left+1;
}
}
// 這樣做完後,左邊指標可能沒到頭;右邊的沒到頭也沒關係,想想為什麼?
while (left <= mid) {
A[current] = helper[left];
current++;
left++;
}
}
public static void main(String[] args){
int[] arr = {9,9,6,7,5,4,2,2,1};
Util.print(arr);
sort(arr);
System.out.println();
Util.print(arr);
System.out.println();
System.out.println("niXu:" + niXu);
}
}
相關文章
- 求逆序對的各種演算法演算法
- 演算法之逆序對兒查詢演算法
- 壓縮字串《演算法很美》字串演算法
- 字串匹配之KMP《演算法很美》字串匹配KMP演算法
- P1908 逆序對
- 逆序對的數量
- 漢諾塔遊戲《演算法很美》遊戲演算法
- 【SSLOJ 3347】動態逆序對
- G - 逆序對的數量
- 陣列中的逆序對陣列
- 替換字串中的空格《演算法很美》字串演算法
- 逆序對的數量 - 題解
- 788. 逆序對的數量
- 樹狀陣列和逆序對陣列
- 求逆序對(介紹+題目)
- [CQOI2011] 動態逆序對
- 所有員工的年齡排序《演算法很美》排序演算法
- AcWing 788. 逆序對的數量
- HDU 2689 【歸併排序求逆序對】排序
- 出現k次與出現1次《演算法很美》演算法
- 歸併排序的經典-求逆序對排序
- 逆序對的數量(歸併排序模板)排序
- JZ-035-陣列中的逆序對陣列
- python對指定字串逆序的6種方法Python字串
- 判斷兩字串的字符集是否相同《演算法很美》字串演算法
- 進階指南--超快速排序(歸併+逆序對)排序
- 劍指Offer-37-陣列中逆序對陣列
- HDU 2689 Sort it【樹狀陣列求逆序對】陣列
- 逆序排列
- 逆序數
- 小頂堆與topK的具體程式碼實現《演算法很美》TopK演算法
- 演算法很美,聽我講完這些Java經典演算法包你愛上她演算法Java
- 【2024全國賽前多校聯考1】逆序對
- 左神基礎班02、陣列中的逆序對陣列
- 劍指offer——陣列中的逆序對C++(75%)陣列C++
- 陣列元素逆序陣列
- 連結串列逆序
- 逆序輸出字元字元