zoukankan      html  css  js  c++  java
  • 第二章 算法基础 思考题2-4(逆序对)

      1 package chap02;
      2 
      3 import static org.junit.Assert.*;
      4 
      5 import java.util.Arrays;
      6 
      7 import org.junit.Test;
      8 
      9 public class ques2_4 {
     10     /**
     11      * 逆序对,将一个序列中的所有逆序对打印输出
     12      * 
     13      * @author xiaojintao
     14      * 
     15      */
     16     static void printReverseOrder(int[] n) {
     17         int i = 0;
     18         int j;
     19         while (i < n.length - 1) {
     20             for (j = i + 1; j < n.length; j++) {
     21                 if (n[i] > n[j]) {
     22                     System.out.println("<" + n[i] + "," + n[j] + ">");
     23                 }
     24             }
     25             i++;
     26         }
     27     }
     28 
     29     @Test
     30     public void testName() throws Exception {
     31         int[] a = { 2 };
     32         printReverseOrder(a);
     33     }
     34 
     35     /**
     36      * 修改归并排序,使之打印出序列中的所有逆序对数
     37      * 
     38      * @param n
     39      */
     40     static void printReverseByMergeSort(int[] n) {
     41         int start = 0;
     42         int end = n.length;
     43         mergeSort(n, start, end);
     44         ;
     45     }
     46 
     47     @Test
     48     public void test() throws Exception {
     49         int[] a = { 2, 3, 8, 6, 1, 5, 4, 0 };
     50         printReverseByMergeSort(a);
     51     }
     52 
     53     /**
     54      * 修改的归并排序算法用于逆序对输出
     55      * 
     56      * @param a
     57      * @return
     58      */
     59     protected static void mergeSort(int[] a, int start, int end) {
     60         if (start < end - 1) {
     61             int mid = (start + end) / 2;
     62             mergeSort(a, start, mid);
     63             mergeSort(a, mid, end);
     64             merge(a, start, mid, end);
     65         }
     66     }
     67 
     68     /**
     69      * 输出逆序对
     70      * 
     71      * @param a
     72      * @param b
     73      * @return
     74      */
     75     protected static void merge(int[] n, int start, int mid, int end) {
     76         int[] l = Arrays.copyOfRange(n, start, mid);
     77         int[] r = Arrays.copyOfRange(n, mid, end);
     78         int i = 0;
     79         int j = 0;// j<mid-start
     80         int k = 0;// k<end-mid
     81         while (i < end - start) {
     82             if (j < mid - start & k < end - mid) {
     83                 if (l[j] < r[k]) {
     84                     n[i + start] = l[j];
     85                     j++;
     86                 } else {
     87                     System.out.println("<" + l[j] + "," + r[k] + ">");
     88                     n[i + start] = r[k];
     89                     k++;
     90                 }
     91             } else if (k < end - mid) {
     92                 n[i + start] = r[k];
     93                 k++;
     94             } else if (j < mid - start) {
     95                 n[i + start] = l[j];
     96                 j++;
     97             }
     98             i++;
     99         }
    100     }
    101 }
  • 相关阅读:
    ufw防火墙设置
    [从0到1搭建ABP微服务]
    .Net Core CI/CD环境搭建(正式版)
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
    [Abp vNext微服务实践]
  • 原文地址:https://www.cnblogs.com/xiaojintao/p/3770124.html
Copyright © 2011-2022 走看看