Java 求整型数组的逆序数

来源:互联网 发布:淘宝店铺简介怎么写? 编辑:程序博客网 时间:2024/05/01 09:51

如{7,5,6,4}的逆序数为5,可以使用归并排序来解决。

但是两个数组是从后向前进行比较,如果第一个数组的数字大于第二个数组当前的数字,就将第二个数组当前的数字位置数量就是对于数组1中当前数字的逆序数。


public class Main {public static void main(String[] args) throws Exception {int[] c = {7,5,6,4};System.out.println(findReverseCount(c));}public static int findReverseCount(int[] input) {if(input == null || input.length == 0){return 0;}int low = 0;int high = input.length-1;return findReverseCountHelper(input, low, high);}public static int findReverseCountHelper(int[] input, int low, int high){if(low == high){return 0;}int mid = (low+high)/2;int left = findReverseCountHelper(input, low, mid);int right = findReverseCountHelper(input, mid+1, high);int count = merge(input, mid, low, high);return left+right+count;}public static int merge(int[] input, int mid, int low, int high){int[] temp = new int[input.length+1];for(int i = low;i<=high;i++){temp[i] = input[i];}int leftEnd = mid;int rightEnd = high;int index = high;int count = 0;while(leftEnd>=low && rightEnd>=mid+1){if(temp[leftEnd]>temp[rightEnd]){count = count+rightEnd-mid;input[index] = temp[leftEnd];leftEnd--;}else{input[index] = temp[rightEnd];rightEnd--;}index--;}while(leftEnd>=low){input[index] = temp[leftEnd];leftEnd--;index--;}while(rightEnd>=mid+1){input[index] = temp[rightEnd];rightEnd--;index--;}return count++;}}


0 0
原创粉丝点击