贝格尔编排法代码

来源:互联网 发布:你好旧时光 知乎 编辑:程序博客网 时间:2024/04/29 13:02
              自己编写的适用于单循环比赛的贝格尔编排法代码,若有可改进之处,望高手指正import java.util.Scanner;public class BergerTest {public static void main(String[] args) {// TODO Auto-generated method stubBergerTest ber = new BergerTest();System.out.println("输入队伍数量:");Scanner cin = new Scanner(System.in);int team_Num = cin.nextInt();if((team_Num&0x1)!=0){team_Num++;}int[] team_arr = new int[team_Num];ber.init(team_arr, team_Num);int flag = team_Num-1;//最后一直队伍或者空白队伍的标志int walk = team_Num/2 -1;//移动步长for(int i= 0; i< team_Num-1; i++){System.out.println("第"+(i+1)+"轮:");if(i>0){flag = ber.exchangFlag(team_arr, team_Num, flag);ber.move(team_arr, team_Num, flag, walk);}ber.display(team_arr, team_Num);}}public void display(int[] arr,int len){for(int i = 0; i < len/2; i++){System.out.println(arr[i]+"...."+arr[len-1-i]);}}//初始化队伍数组public void init(int[] arr,int len){for(int i = 0;i < len ; i++){arr[i] = i+1;}}        //return the pos of flag after swappublic int exchangFlag(int[] arr,int len, int flag){int lastflag = flag;if(flag != 0){flag = 0;}else{flag = len -1;}swap(arr,flag,lastflag);return flag;}public void move(int[] arr,int len, int flag,int walk){int begin= 1;int nextPos,beginPosValue;intnextPosValue = arr[begin];for(int j = 0; j<len-1;j++){beginPosValue = nextPosValue;nextPos = getNextPos(begin, walk, flag,len);nextPosValue = arr[nextPos];arr[nextPos] = beginPosValue;begin = nextPos;}}public void swap(int[] arr, int flag, int lastflag) {int temp = arr[flag];arr[flag] = arr[lastflag];arr[lastflag] = temp;}public int getNextPos(int begin,int walk,int flag,int len){for(int i = 0 ;i < walk; i++){begin++;if((begin%len)== flag)begin++;}return begin%len;}}


0 0
原创粉丝点击