1. 程式人生 > 其它 >陣列中的逆序對 ,使用歸併排序 求陣列中的逆序對

陣列中的逆序對 ,使用歸併排序 求陣列中的逆序對

技術標籤:資料結構演算法C#

題目

https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/

歸併排序參考

https://mp.csdn.net/editor/html/112734224

程式碼

public class Solution
{
    public int res = 0;

    public int ReversePairs(int[] nums)
    {
        res = 0;
        int[] temparray = new int[nums.Length];
        System.Array.Copy(nums, temparray, nums.Length);
        Sort(nums, 0, nums.Length-1, temparray);

        return res;
    }

    private void Sort(int[] arr, int l, int r, int[] temparr)
    {
        if (l >= r) return;
        int mid = l + (r - l) / 2;

        Sort(arr, l, mid, temparr);
        Sort(arr, mid + 1, r, temparr);
        if (arr[mid].CompareTo(arr[mid + 1]) < 0) return;
        Morge(arr, l, mid, r, temparr);

    }
    public void Morge(int[] arr, int l, int mid, int r, int[] temparr)
    {
        System.Array.Copy(arr, l, temparr, l, r - l + 1);
        int i = l, j = mid + 1;
        for (var k = l; k <= r; k++)
        {
            if (i > mid)
            {
                arr[k] = temparr[j];
                j++;
            }
            else if (j > r)
            {
                arr[k] = temparr[i];
                i++;
            }
            else if (temparr[i].CompareTo(temparr[j]) <= 0)
            {
                arr[k] = temparr[i];
                i++;
            }
            else
            {
                res += (mid - i + 1);
                arr[k] = temparr[j];
                j++;
            }
        }

    }
}