逆序对
来源:互联网 发布:华为怎么卸载软件 编辑:程序博客网 时间:2024/04/29 04:24
设A[1…n]是一个包含n个不同数的数组。如果在i<j的情况下,有A[i]>A[j],则(i,j)就称为A中的一个逆序对(inversion)【《算法导论》2-4】
现给出一个数列,求该数列中的逆序对(逆序对 )
利用归并排序的方法我们给出如下算法:
//// main.cpp// CpushTest//// Created by Ellen on 14-5-11.// Copyright (c) 2014年 andy. All rights reserved.//#include <iostream>using namespace std;static int specialtime=0;void mergeSort(int *A,int left,int mid,int right){ int *L=new int[mid-left+1]; int *R=new int[right-mid+1]; int i,j; for(i=0;i<mid-left+1;i++) { L[i]=A[left+i]; } for (j=0; j<right-mid; j++) { R[j]=A[mid+j+1]; } i=0,j=0; int k=left; while(i<mid-left+1 && j<right-mid) { if(L[i]<=R[j]) { A[k++]=L[i++]; }else { A[k++]=R[j++]; specialtime+=mid-left+1-i; } } while (i<mid-left+1) { //specialtime++; A[k++]=L[i++]; } while (j<right-mid) { A[k++]=R[j++]; } delete []L; delete []R; }void merge(int *A,int left,int right){ if (left<right) { int mid=(right-left)/2+left; merge(A,left,mid); merge(A,mid+1,right); mergeSort(A,left,mid,right); } }int main(int argc, const char * argv[]){ int A[]={100,11,43,65}; //int A[]={56,3,5,68,100,32}; //int A[]={68,100,32}; merge(A,0,sizeof(A)/sizeof(int)-1); for(int i=0;i<sizeof(A)/sizeof(int);i++) { cout<<A[i]<<" "; } cout <<endl; cout<<"逆序对是 "<<specialtime<<endl; return 0;}
0 0
- 逆序数 & 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- 逆序对
- SVM入门(九)松弛变量(续)惩罚因子解决训练集比例不均衡问题
- JS创建cookie、获得cookie、删除cookie相关函数的封装
- HDU2874 Connections between cities 最近公共祖先+离线
- UIViewController的生命周期与内存过低警告
- unity自带寻路Navmesh入门教程
- 逆序对
- C#通过显示接口实现解决命名冲突
- android animation demo (2014-12-11 封装为工具类)
- 谷歌和淘宝的大数据搜索案例
- FCKeditor配置
- 用反射属性类型为:java.util.List<com.abc.User>
- Apache Hadoop生态系统
- Unity3d网络游戏Socket通讯
- 二十