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 ...