1. 程式人生 > >演算法學習01 逆序數和全排列

演算法學習01 逆序數和全排列

今天寒假第一天開始認認真真的學習Java演算法,主要學習了兩個題。

1.逆序數

就是找這個數的後面,有幾個數比它小

import java.util.Iterator;
import java.util.Scanner;

public class Inversion_num {

	 public static void main(String args[]){  
		 
		 Scanner input =new Scanner(System.in);
	        boolean operation=true;
	        while(operation) {
	        	String string=input.nextLine();
	        	System.out.println(inversionNum(string));
	        	operation=false;
	        }


	    }
	      
	       
	 public static int  inversionNum(String string){
		 int count=0;
		 String a[]=string.split(" ");
int b[]=new int[a.length]; for(int i=0;i<a.length;i++) { b[i]=Integer.parseInt(a[i]); }//將輸入的字串以空格分開,存到新的整形陣列b中 for(int j = 0;j<b.length;j++) { for (int i = j+1; i < b.length; i++) { if(b[j]>b[i]) { count++; } } } return count; } }

input:

4 3 6 5 1 2

output:

10

2.全排列

運用遞迴的方式來處理全排列,最後把結果存到TreeSet中,剔除重複值。

import java.util.Scanner;
import java.util.TreeSet;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class W01 {
	long count=0;
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//Scanner scanner=new Scanner(System.in);
		//int n=scanner.nextInt();
	  List<Integer> s=new ArrayList<Integer>();  
         List<Integer> rs=new ArrayList<Integer>();  
s.add(3); s.add(2); s.add(2); s.add(1); s.add(4); s.add(5); fullpermutation(s,rs); Iterator<String> iterator=ts.iterator(); while (iterator.hasNext()) System.out.println(iterator.next()); System.out.println("總數是:"+ts.size()); } static TreeSet<String> ts=new TreeSet<String>(); private static void fullpermutation(List<Integer> s, List<Integer> rs) { // TODO Auto-generated method stub if(s.size()==1) { rs.add(s.get(0)); //System.out.println(rs.toString()); ts.add(rs.toString()); rs.remove(rs.size()-1); }else { for(int i=0;i<s.size();i++) { rs.add(s.get(i)); List<Integer> tmp=new ArrayList<Integer>(); for (Integer a : s) { tmp.add(a); } tmp.remove(i); fullpermutation(tmp, rs); rs.remove(rs.size()-1); } } } }

output:

…………

…………
[5, 4, 2, 2, 1, 3]
[5, 4, 2, 2, 3, 1]
[5, 4, 2, 3, 1, 2]
[5, 4, 2, 3, 2, 1]
[5, 4, 3, 1, 2, 2]
[5, 4, 3, 2, 1, 2]
[5, 4, 3, 2, 2, 1]
總數是:360

感覺在演算法方面還是比較小白,繼續加油努力!!