Merge Sort 并且返回逆序数的算法 - C#实现

原创 2007年09月25日 11:36:00
针对算法导论第二章的 Problem 2-4的C#实现:
public static Int32 MergeSort(Int32[] InputArray)
...{
    
// Divide: Divide the n-element sequence to be sorted into two subsequences of n/2 elements each.
    Int32 Length = InputArray.Length;
    
if (Length < 2return 0;

    Int32 invCnt 
= 0// Inversion number

    Int32 middle 
= Length / 2;

    Int32 lIdx 
= 0;
    Int32[] lArray 
= new Int32[middle];
    Array.Copy(InputArray, 
0, lArray, 0, lArray.Length);

    Int32 rIdx 
= 0;
    Int32[] rArray 
= new Int32[Length - middle];
    Array.Copy(InputArray, middle, rArray, 
0, rArray.Length);
        
    
// Conquer: Sort the two subsequences recursively using merge sort.
    if (lArray.Length >= 2) invCnt += MergeSort(lArray);
    
if (rArray.Length >= 2) invCnt += MergeSort(rArray);
    
    
// Combine: Merge the two sorted subsequences to produce the sorted answer.
    lIdx = rIdx = 0;
    Int32 mergeIdx 
= 0;
    
while(mergeIdx < InputArray.Length &&  lIdx < lArray.Length && rIdx < rArray.Length )
    
...{
        
if (lArray[lIdx] <= rArray[rIdx]) InputArray[mergeIdx++= lArray[lIdx++];
        
else
        
...{
            invCnt 
+= lArray.Length - lIdx;
            InputArray[mergeIdx
++= rArray[rIdx++];
        }

    }


    
while(lIdx < lArray.Length) InputArray[mergeIdx++= lArray[lIdx++];
    
while(rIdx < rArray.Length) InputArray[mergeIdx++= rArray[rIdx++];

    
return invCnt;
}

归并排序(Merge Sort)+计算数列逆序数

首先是这个算法的基本过程和思想:就是先把一个数列分成两部分,再接着把分成两部分的数列分别再分成两部分,直到分到不能再次分为止,也就是一个数列里面只有一个数的时候。最后我们把它们两两合并,在合并的时候,...

hdu 2689 sort it(树状数组 逆序数)

树状数组求逆序数,原来一直没搞明白,今天看了一遍文章讲的很清楚,下面把有关内容粘过来: 对于小数据,可以直接插入树状数组,对于大数据,则需要离散化,所谓离散化,就是将 100 200 300 ...

NYOJ 322 Sort(归并排序求逆序数)

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=322 如果按冒泡排序这些O(n^2)肯定会超时,所以需要找一种更快的方法 -------...
  • A_Eagle
  • A_Eagle
  • 2012年03月14日 13:46
  • 1362

hdu5775 Bubble Sort 树状数组维护逆序数

题目链接###题意解读 理解冒泡排序的过程 最左坐标值为当前坐标和最终坐标的最小值() 最右坐标值为当前坐标加右边较小数据的个数(每个比当前值小的右边的数据都会和当前值交换) 树状数组从右往左扫,将当...

利用归并排序实现逆序数计算

  • 2009年06月25日 17:07
  • 2KB
  • 下载

poj 1007 DNA Sorting 【对逆序数进行sort排序】

DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submission...
  • dxx_111
  • dxx_111
  • 2015年09月04日 15:18
  • 152

HDU 2689 Sort it(树状数组)(类似逆序数,同样不需要离散化)

Problem Description You want to processe a sequence of n distinct integers by swapping two adjacent ...
  • a_ppler
  • a_ppler
  • 2013年08月21日 13:43
  • 598

HDU 5775 Bubble Sort 树状数组求逆序数

题目描述:Problem Description P is a permutation of the integers from 1 to N(index starting from 1). He...

HDU 5775 Bubble Sort(归并排序+逆序数)

题目链接:HDU 5775 Bubble Sort                                                                     ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Merge Sort 并且返回逆序数的算法 - C#实现
举报原因:
原因补充:

(最多只允许输入30个字)