1. 程式人生 > >Java(線性代數--逆序數的求算)

Java(線性代數--逆序數的求算)

逆序數定義:
在一個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為一個逆序。

逆序數可如下計算:標出每個數右面比它小的數的個數,它們的和就是逆序數.例如求436512的逆序數:t(436512)=3+2+3+2+0+0=10.一個排列中逆序的總數就稱為這個排列的逆序數。逆序數為偶數的排列稱為偶排列;逆序數為奇數的排列稱為奇排列。如2431中,21,43,41,31是逆序,逆序數是4,為偶排列

本人初學者,逆序數的求算應該有更簡單的方法,不過本人不太會,以後學了補上(^__^)
Java原始碼:

import java.util.Scanner;

/**
 * @author
Taoey Huang * */
public class Test { public static int inversionNum(String aString){ int n=0; // 切開string String sArr[]=aString.split(","); // 建立一個double陣列 double dArr[]=new double[sArr.length]; // 填充陣列 for (int i = 0; i<sArr.length; i++) dArr[i] = Integer.parseInt(sArr[i]); for
(int i=1;i<dArr.length;i++){ for(int j=i-1;j>=0;j--){ if(dArr[i]<dArr[j]) n++; } } return n; } public static void main(String[] args) { Scanner input =new Scanner(System.in); boolean operation=true
; while(operation){ System.out.println("請輸入數字串,中間以逗號連線:"); String str=input.nextLine(); System.out.println("該數字序列的逆序數為:"+inversionNum(str)); // 進行是否進行下一個操作的判斷 System.out.println("是否繼續進行操作:(Y/N)"); String a=input.next(); if (a.equals("N")) { operation=false; } else if(a.equals("Y")){ } else{ System.out.println("請輸入正確的字元形式"); } // 很重要,沒有這一句會報錯,具體的分析請看 下面的部落格連線 input.nextLine(); } } }