归并排序(从小到大)

1、划分问题:把序列分成元素个数尽量相等的两半。

2、递归求解:把两半元素分别排序。

3、合并问题:吧两个有序表合成一个。

/**
**author :Or_me **
╭︿︿︿╮
{/ A  C /} 
 ( (OO) ) 
  ︶︶︶ 
**    **
**   题**
** 2014 年 月 日**
**/
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
void merge_sort(int *A,int x,int y,int *T)
{
    if (y-x>1)//如果元素个数大于一个,则进行排序
    {
        int m=x+(y-x)/2;
        int p=x,q=m,i=x;
        merge_sort(A,x,m,T);//递归求解,排序左边的元素
        merge_sort(A,m,y,T);//递归求解,排序右边的元素
        while (p=y||(p=y成立,则不会计算(p=y不成立,则计算(p

如果要求给出数组的逆序对数,即有多少个有序对(i,j),使得i

将"else T[i++]=A[q++];"改为"else{T[i++]=A[q++];cnt+=m-p;}"


你可能感兴趣的:(模板)