首頁 >Java >Java基礎 >java中如何實現遞歸排列

java中如何實現遞歸排列

王林
王林轉載
2019-11-27 17:04:022135瀏覽

java中如何實現遞歸排列

遞歸排列

遞歸,俗稱“我 調 我 自 己”,如果從資料結構的角度來理解,其實就是棧。

假如我們要求得到A、B、C的排列,流程大概如下:

(0)初始狀態,堆疊內無資料。此時堆疊外:A、B、C

(1)將A放入堆疊底部。此時堆疊外:B、C

(2)將B放入堆疊中。此時堆疊外:C

(3)將C放入堆疊中。此時堆疊外:無,輸出第一種排列ABC

(4)將C退棧。此時堆疊外:C

(5)將B退棧。此時堆疊外:B、C

(6)將C放入堆疊中。此時堆疊外:B

(7)將B放入堆疊中。此時堆疊外:無,輸出第二種排列ACB

之後依序退棧,回歸初始狀態,再將B放入棧底,重複動作,即可得到所有排列。

免費影片教學推薦:java影片教學

範例如下:

public class demo{
    public static void main(String[] args) {
        char buf[]={'A','B','C'}; //定义待排列数组
        perm(buf,0,buf.length-1);
    }
    public static void perm(char[] buf,int start,int end){
        if(start==end){//入栈结束条件,执行完该判断语句后开始逐步出栈
            for(int i=0;i<=end;i++){
                System.out.print(buf[i]);
            }
            System.out.println();
        }
        else{//递归正体
            for(int i=start;i<=end;i++){//控制入栈数据
                exchange(buf,start,i);//入栈操作
                perm(buf,start+1,end);//递归,对下一个数据执行出入栈操作
                exchange(buf,start,i);//出栈操作
            }
        }
    }
    public static void exchange(char[] c,int x,int y){ //交换数组中的数据,在栈里的表现就是入栈和出栈
        char temp=c[x];
        c[x]=c[y];
        c[y]=temp;
    }
}

執行結果:

ABC
ACB
BAC
BCA
CBA
CAB

本文由java零基礎入門專欄推薦,歡迎大家一起來共同學習交流!

以上是java中如何實現遞歸排列的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除