看見別人寫出來漂亮實用的代碼,終於下定決心好好學習演算法,在這裡記錄下自己學習的成果。
前兩天看到數組的全排列,於是自己照著別人的想法實現了一下,感覺自己理解了,有點小高興,記載一下。
/* * 數組的全排列*/public class myAllSort {public static void sort(int[] number,int start,int end){int temp;//如果發現數組對掉元素到了最後一個,那麼就輸出,證明已經符合要求if(start==end){print(number);}//依次將數組的第一個元素和後面的元素一一對調,然後第一次對掉之後遞迴,//將數組的第二個元素和他之後的元素對掉,最後一次進行/* * 1 2 3 4-->1 2 3 4-->1 2 3 4 * 1 2 4 3 * 1 3 2 4-->1 3 2 4 * 1 3 4 2 * 1 4 3 2-->1 4 3 2 * 1 4 2 3 * 2 1 3 4 * 3 2 1 4 * 4 2 3 1 * */for(int i=start;i<end;i++){temp = number[start];number[start] = number[i];number[i] = temp;sort(number,start+1,end);//print(number);//輸出排序的全過程//將對掉之後的數組便會原來的順序,以便下次temp = number[start];number[start] = number[i];number[i] = temp;//}}public static void print(int[] number){for(int i=0;i<number.length;i++){System.out.print(number[i]+"--");}System.out.println();}public static void main(String[] args) {int[] number = {1,2,3,4};sort(number,0,number.length);}}還有一種數組的選擇排序方法,感覺這個思想對我很有用,具體的出處給忘了。
import java.util.ArrayList;import java.util.Arrays;import java.util.List;/* * 從屬注重選擇幾個數字進行排列 * 例如:五個選三個的全排列 * 演算法原理:在數組中選取一個數字先儲存到集合中,然後再依次選取其他數字, * */public class ChooseServalFromNumber {public static final int NUM = 4;public static void main(String[] args) {Object[] obj = new String[]{"1","2","3","4"};List<Object> list = Arrays.asList(obj);chooseNumberSort(list,new ArrayList<Object>());}public static void chooseNumberSort(List<Object> list,List<Object> target){//如果目的地組合中的數字達到了我們需求的個數就輸出//if(target.size()==NUM)//System.out.println(target+"--");if(target.size()==4)System.out.println(list+" --> "+target+"--輸出");//else//System.out.println(list+" --> "+target);for(int i=0;i<list.size();i++){List<Object> newList = new ArrayList<Object>(list);List<Object> newTarget = new ArrayList<Object>(target);newTarget.add(newList.get(i));newList.remove(i);System.out.println(list+" --> "+target);chooseNumberSort(newList,newTarget);}}}/* 輸出結果:[1, 2, 3, 4] --> [][2, 3, 4] --> [1][3, 4] --> [1, 2][4] --> [1, 2, 3][] --> [1, 2, 3, 4]--輸出[3, 4] --> [1, 2][3] --> [1, 2, 4][] --> [1, 2, 4, 3]--輸出[2, 3, 4] --> [1][2, 4] --> [1, 3][4] --> [1, 3, 2][] --> [1, 3, 2, 4]--輸出[2, 4] --> [1, 3][2] --> [1, 3, 4][] --> [1, 3, 4, 2]--輸出[2, 3, 4] --> [1][2, 3] --> [1, 4][3] --> [1, 4, 2][] --> [1, 4, 2, 3]--輸出[2, 3] --> [1, 4][2] --> [1, 4, 3][] --> [1, 4, 3, 2]--輸出[1, 2, 3, 4] --> [][1, 3, 4] --> [2][3, 4] --> [2, 1][4] --> [2, 1, 3][] --> [2, 1, 3, 4]--輸出[3, 4] --> [2, 1][3] --> [2, 1, 4][] --> [2, 1, 4, 3]--輸出[1, 3, 4] --> [2][1, 4] --> [2, 3][4] --> [2, 3, 1][] --> [2, 3, 1, 4]--輸出[1, 4] --> [2, 3][1] --> [2, 3, 4][] --> [2, 3, 4, 1]--輸出[1, 3, 4] --> [2][1, 3] --> [2, 4][3] --> [2, 4, 1][] --> [2, 4, 1, 3]--輸出[1, 3] --> [2, 4][1] --> [2, 4, 3][] --> [2, 4, 3, 1]--輸出[1, 2, 3, 4] --> [][1, 2, 4] --> [3][2, 4] --> [3, 1][4] --> [3, 1, 2][] --> [3, 1, 2, 4]--輸出[2, 4] --> [3, 1][2] --> [3, 1, 4][] --> [3, 1, 4, 2]--輸出[1, 2, 4] --> [3][1, 4] --> [3, 2][4] --> [3, 2, 1][] --> [3, 2, 1, 4]--輸出[1, 4] --> [3, 2][1] --> [3, 2, 4][] --> [3, 2, 4, 1]--輸出[1, 2, 4] --> [3][1, 2] --> [3, 4][2] --> [3, 4, 1][] --> [3, 4, 1, 2]--輸出[1, 2] --> [3, 4][1] --> [3, 4, 2][] --> [3, 4, 2, 1]--輸出[1, 2, 3, 4] --> [][1, 2, 3] --> [4][2, 3] --> [4, 1][3] --> [4, 1, 2][] --> [4, 1, 2, 3]--輸出[2, 3] --> [4, 1][2] --> [4, 1, 3][] --> [4, 1, 3, 2]--輸出[1, 2, 3] --> [4][1, 3] --> [4, 2][3] --> [4, 2, 1][] --> [4, 2, 1, 3]--輸出[1, 3] --> [4, 2][1] --> [4, 2, 3][] --> [4, 2, 3, 1]--輸出[1, 2, 3] --> [4][1, 2] --> [4, 3][2] --> [4, 3, 1][] --> [4, 3, 1, 2]--輸出[1, 2] --> [4, 3][1] --> [4, 3, 2][] --> [4, 3, 2, 1]--輸出*/