归并排序求逆序数java

来源:互联网 发布:mybatis 打印完整sql 编辑:程序博客网 时间:2024/05/22 12:53
/** * 采用归并排序求逆序数 *  */public class BinaryMergeSort {  private static int nixuNum = 0;  private static void merge(int arr[], int start, int mid, int end) {    int temp[] = new int[end - start + 1];    int s = 0;    int ls = start;    int rs = mid + 1;    while (ls <= mid && rs <= end) {      if (arr[ls] <= arr[rs]) {        temp[s++] = arr[ls++];      } else {        temp[s++] = arr[rs++];        nixuNum += mid - ls + 1;      }    }    while (ls <= mid) {      temp[s++] = arr[ls++];    }    while (rs <= end) {      temp[s++] = arr[rs++];    }    int j = 0;    for (int i = start; i <= end; i++) {      arr[i] = temp[j++];    }  }  public static void mergesort(int arr[], int start, int end) {    if (start < end) {      mergesort(arr, start, (start + end) / 2);      mergesort(arr, (start + end) / 2 + 1, end);      merge(arr, start, (start + end) / 2, end);    }  }  public static void main(String[] args) {    int arr[] = { 4, 1, 2, 3, 6, 5 };    mergesort(arr, 0, arr.length - 1);    for (int i = 0; i < arr.length; i++) {      System.out.print(" " + arr[i]);    }    System.out.println();    System.out.println("逆序数为:" + nixuNum);  }}

原创粉丝点击