逆序对的求法 归并排序

第一种方法将数组遍历一遍  一次比较,如果数组有n个元素,那么需要比较(1+n)*n/2次

第二种是利用归并排序算的

//归并排序
#include
using namespace std;
int count=0;
const int LENGTH=100;
int temp[LENGTH];  //额外的辅助数组

void MergeArray(int arr[],int start,int middle,int end)
{
	int i=start;
	int j=middle+1;
	int k=0;
	while(i<=middle&&j<=end)
	{
		if(arr[i]<=arr[j])
		{
			temp[k++]=arr[i++]; 
		} else{
			temp[k++]=arr[j++];
			count+=middle-i+1;//这一句是关键
		}
	}
	while(i<=middle){
		temp[k++]=arr[i++];
		
	}
	while(j<=end){
		temp[k++]=arr[j++]; 
	}	
	//将临时数组的元素重新复制给原始数组的制定位置
		for(i=0;i


这个方法是在参考了一个文章之后写的 网址忘记了

你可能感兴趣的:(算法&数据结构)