Java(線性代數--逆序數的求算)
阿新 • • 發佈:2019-01-05
逆序數定義:
在一個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為一個逆序。
逆序數可如下計算:標出每個數右面比它小的數的個數,它們的和就是逆序數.例如求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();
}
}
}