歸併排序及相關變形問題 逆序對 總結(C 版)

2021-08-30 08:24:45 字數 2393 閱讀 8645

1.歸併排序

測試**:

#include#includeusing namespace std;

void merge(vector& nums, int begin, int mid, int end)

void mergesort(vector& nums)

mergesort(nums);

cout << endl;

} return 0;

}

2. 劍指offer-陣列中的逆序對問題

測試**:

(1)第一部分是牛客網ac**

class solution 

else

} while (i >= begin)

while (j > mid)

for (long long m = begin; m <= end; ++m)

return cnt;

} long long mergesort(vector& nums,

vector& copy,

long long begin, long long end)

long long mergesort(vector& nums)

public:

long long inversepairs(vectordata)

};

(2)vs下測試**:

#include#includeusing namespace std;

int merge(vector& nums, int begin, int mid, int end)

else

} while (i >= begin)

while (j > mid)

for (int m = begin; m <= end; ++m)

return cnt;

}int mergesort(vector& nums, int begin, int end)

int mergesort(vector& nums)

int main()

cout3. leetcode 315 count of smaller number after self

測試**:

ac**:

class solution

else

}while (i <= mid)

while (j <= end)

for (int m = begin; m <= end; ++m)

}void mergesort(vector>& record,vector&ret, int begin, int end)

void mergesort(vector& nums,vector& ret)

mergesort(val2index,ret, begin, end);

}public:

vectorcountsmaller(vector& nums) ;

vectorret(nums.size(),0);

mergesort(nums,ret);

return ret;

}};

vs下測試**:

#include#includeusing namespace std;

//現在的問題是我如何記錄下每個數,以及它的逆序對

// void merge(vector>& record,vector& count, int begin, int mid, int end)

else

} while (i <= mid)

while (j <= end)

for (int m = begin; m <= end; ++m)

}void mergesort(vector>& record,vector&ret, int begin, int end)

void mergesort(vector& nums,vector& ret)

mergesort(val2index,ret, begin, end);

for (int i = 0; i < val2index.size(); i++) }

int main()

vectorret(nums.size(),0);

mergesort(nums,ret);

for (int i = 0; i4. leetcode 493 reverse pair

**:注意這一題的條件和劍指offer中的逆序對條件有所不同,該題逆序對滿足條件為 i < j && nums[i] > 2 * nums[j] ,這樣的 (i ,j) 才滿足條件,解法上大同小異,需要注意控制判斷條件,且不要漏算和多算,**後續補充。

歸併排序及逆序對演算法

排序都用qsort了,別的排序演算法不怎麼用,但有些排序的思想很重要。碰到一道求逆序對的題,要用到歸併排序,學習了一下歸併排序。歸併排序是用分治思想,分治模式在每一層遞迴上有三個步驟 分解 將n個元素分成個含n 2個元素的子串行。解決 用合併排序法對兩個子串行遞迴的排序。合併 合併兩個已排序的子串行...

《泛》 歸併排序 及 逆序對

今天寫乙個歸併排序的模板,返回值為該序列的逆序對數 基本思路 歸併排序就是利用二分的思想,將區間無限遞迴二分,直到當前劃分區間只包含乙個元素或沒有元素的時候 我們認為這個序列是自動有序的 我們回溯到上一層,然後將當前層的左右兩個區間合併為乙個有序序列,然後繼續回溯,回溯之後,當前層的左右兩個區間都應...

歸併排序 及拓展 逆序對

時間複雜度 歸併排序時間複雜度為o nlogn 似乎和快速排序差不多,但在有些特定的場合下,歸併排序卻能起到快速排序達不到的效果 如一年的聯賽題,瑞士輪 思路及實現 歸併排序分為兩個步驟,分 合 分 的過程我們用二分的思路實現 合 的過程時間複雜度可達到o n 分 進行分治 假設當前處理的區間為l ...