第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

全排列算法java語言的實現(xiàn)

標簽:
Java

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;

import java.util.List;

public class Perm {

    int n =0;//如果输入的元素个数超过8n则需要用long类型
    List<String>lists = new ArrayList<>();

    /**
     * 读取文件内待排列的数据
     * @return
     * @throws IOException 
     */

    public  String [] in_file_qpl(String infile) throws IOException{
        BufferedReader in =new BufferedReader( 
                new InputStreamReader(
                        new FileInputStream(infile)));
        List<String> list = new ArrayList<>();
        String line ;
        while ((line = in.readLine())!=null ) {
            list.add(line);
        }
        String[] a = list.toArray(new  String[list.size()]) ;
        System.out.println(a.length);
        in.close();
        return a;

    }
    public  void out_file_qpl(String outfile , List<String> lists) throws IOException{
        System.out.println(lists.isEmpty());
        FileOutputStream fos = new FileOutputStream(outfile);
        byte [] buf = new byte[8*1024];
        String buff= null;
        for (int i = 0; i < lists.size(); i++) {
            buff= lists.get(i);
            buf = buff.getBytes();
            fos.write(buf);
            fos.write("\r\n".getBytes());
            fos.flush();
        }

        fos.close();

    }

    /**
     * @param infile
     * @param outfile
     * @throws IOException
     * 驱动函数 传入输入与输出文件的地址
     */
    public void perm(String infile ,String outfile) throws IOException{
        String[] list = in_file_qpl(infile);
         Arrays.sort(list);
         perm(list, 0, list.length-1);
         out_file_qpl(outfile, lists);
    }

    /**
     * @param list
     * @param k
     * @param m
     * @param n
     * @return 返回储存有所有全排列的string数组
     *  list 的第 0~ k-1 个元素作为前缀、第 k~m-1 个元素进行全排列得到的全排列
     */
    public void perm(String[]  list ,int k ,int m  ){
        int i ;
        if(k>m){
            n++;
            System.out.println("第"+n +"个排列为:  " + Arrays.toString(list));
            lists.add( Arrays.toString(list));
            System.out.println();
        }else{
            for( i = k; i<=m ; i++){
                swap1(list, k   , i);
                perm(list, k+1, m);
                swap2(list, k   , i);
            }
        }

    }

    /**
     * 交换数组中a和b位置上的元素
     * @param list
     * @param a
     * @param b
     */
    public void swap( String [] list, int  a , int  b){
        String m =list[a] ;
        list[a] = list[b];
        list[b] = m;
    }
    /**
     * list中  将a与a到b-1直间得数向后顺延一个位置,b位置得元素置换a得位置上
     * @param a
     * @param b
     */
    public void swap1(String[] list, int a, int b){
        int i ;
        String  temp ;
        temp = list[b];
        for(i = b ;  i > a;  i--){
            list[i]=list[i-1];

        }
        list[a] = temp;
    }
    /**
     * list中  将a-1与a-1到b直间得数向前顺延一个位置,b位置得元素置换a得位置上
     * @param a
     * @param b
     */
    public  void swap2 (String [] list, int a, int b){
        int i ;
        String  temp ;
        temp = list[a];
        for(i = a ;  i <b;  i++){
            list[i]=list[i+1];
        }
        list[b] = temp;
    }
    public static void main(String[] args) {   
        Perm perm = new Perm();

        try {
            perm.perm("src/inperm.txt", "src/outperm.txt");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(perm.n);

    }
}
點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消