剑指Offer --> Question 36

来源:互联网 发布:c语言九九乘法表倒三角 编辑:程序博客网 时间:2024/06/06 00:55
<span style="font-family:Courier New;font-size:14px;"></span>
<span style="font-family:Courier New;font-size:14px;">#include <iostream>#include "inversePairs.h"using namespace std;static int times = 0;void mergeSort(int num[], int start, int end){if (num == nullptr){cout << "invalid input." << endl;return;}else if (end - start == 0){return;}else if (end - start > 0 && num != nullptr){int middle = (end + start) / 2;mergeSort(num, start, middle);mergeSort(num, middle + 1, end);times += merge(num, start, end);}}int merge(int num[], int start, int end){if (end - start == 0){return 0;}int time = 0;int middle = (end + start) / 2;int length1 = middle - start + 1;int length2 = end - middle;int left[N / 2], right[N / 2];int temp[N];int posLeft = length1 - 1;int posRight = length2 - 1;int posTemp = end - start;for (int i = 0; i < length1; i++){left[i] = num[start + i];}for (int i = 0; i < length2; i++){right[i] = num[middle + 1 + i];}while (posLeft >= 0 && posRight >= 0){if (left[posLeft] > right[posRight]){time += posRight + 1;temp[posTemp] = left[posLeft];posLeft--;posTemp--;}else {temp[posTemp] = right[posRight];posRight--;posTemp--;}}if (posLeft < 0){while (posRight >= 0){temp[posTemp--] = right[posRight--];}}if (posRight < 0){while (posLeft >= 0){temp[posTemp--] = right[posLeft--];}}for (int i = start, j = 0; i <= end; i++, j++){num[i] = temp[j];}return time;}int main(){int num[] = { 7, 5, 6, 4 };mergeSort(num, 0, 3);cout << times << endl;return 0;}</span>


0 0
原创粉丝点击