【java】归并排序 逆序对数
来源:互联网 发布:歌颂 陈奕迅 知乎 编辑:程序博客网 时间:2024/06/01 09:14
归并排序
按照分治三步法,介绍归并排序步骤:
划分问题:把序列分成元素个数尽量相等的两半;
递归求解:把两半元素分别排序;
合并问题:把两个有序表合并成一个。
前两部分容易完成,关键在于如何合并问题。
归并排序代码:
import java.util.Arrays;import java.util.Scanner;public class Main {public static void mergeSort(int[] arr,int x,int y,int []temp){if(y-x<=1)return;int m=(x+y)/2;mergeSort(arr,x,m,temp);mergeSort(arr,m,y,temp);int index=x,p=x,q=m;while(p<m||q<y){if(p>=m){temp[index++]=arr[q++];}else if(q>=y){temp[index++]=arr[p++];}else if(arr[p]<=arr[q]){temp[index++]=arr[p++];}else{temp[index++]=arr[q++];}}for(int i=x;i<y;i++){//将辅助空间的有序元素复制回去arr[i]=temp[i];}}public static void main(String[] args){Scanner scanner = new Scanner(System.in);while(scanner.hasNext()){int n=scanner.nextInt();int[] arr=new int[n];int[] temp=new int[n];//申请的辅助空间for(int i=0;i<n;i++){arr[i]=scanner.nextInt();}mergeSort(arr,0,n,temp);System.out.println(Arrays.toString(arr));}scanner.close();}}
逆序对数
输入一列数a1,a2,a3...an,求它的逆序对数,即有多少个有序对(ai,aj),使得i<j,但ai>aj.n可高达10的6次方。
样例输入:
6
6 1 2 3 5 4
6 1 2 3 5 4
样例输出:
6
import java.util.Scanner;public class Main {public static int mergeSort(int[] arr,int x,int y,int []temp){if(y-x<=1)return 0;int m=(x+y)/2;int left=mergeSort(arr,x,m,temp);int right=mergeSort(arr,m,y,temp);int index=x,p=x,q=m;int count=0;while(p<m||q<y){if(p>=m){temp[index++]=arr[q++];}else if(q>=y){temp[index++]=arr[p++];}else if(arr[p]<=arr[q]){temp[index++]=arr[p++];}else{temp[index++]=arr[q++];count+=(m-p);}}for(int i=x;i<y;i++){arr[i]=temp[i];}return count+left+right;}public static void main(String[] args){Scanner scanner = new Scanner(System.in);while(scanner.hasNext()){int n=scanner.nextInt();int[] arr=new int[n];int[] temp=new int[n];for(int i=0;i<n;i++){arr[i]=scanner.nextInt();}System.out.println(mergeSort(arr,0,n,temp));}scanner.close();}}
0 0
- 【java】归并排序 逆序对数
- 归并排序-逆序对数
- 归并排序求逆序对数)
- 归并排序&求逆序对数
- 归并排序求逆序对数
- 归并排序求逆序对数
- 归并排序及逆序对数
- 归并排序之逆序对数
- 归并排序求逆序对数
- 逆序对数(归并排序)
- 边归并排序,边统计逆序对数
- hash一下 + 归并排序计算逆序对数
- 归并排序 and 逆序对数(分治)
- 归并排序同时计算逆序对数
- 求逆序对数(利用归并排序)
- POJ 2299 归并排序 求逆序对数
- 归并排序算法求逆序对数
- 归并排序及利用归并排序求逆序对数
- 程序员面试金典——猫狗收容所
- mysql集群--双机互备
- Eloquent JavaScript 笔记 前言:这是个艰难的决定
- 更改Jenkins的主目录
- 阿拉伯数字转英文
- 【java】归并排序 逆序对数
- Java的特点
- mysql 定时器
- 12期 5月期刊自荐
- 解决C++与Java 使用Socket Float数据类型的正确互传
- exel复制粘贴内容生成表格,相同项合并
- spring4学习记录03-spring mvc实战之框架构建
- Oracle merge into原来可以这么写
- 百家号如何更好的解决限流去运营获得收益呢?