package com.kingdz.algorithm.time201705;
import java.util.Arrays;
import java.util.Random;
/**
* 三色旗问题<br>
* 红白蓝的三种旗子若干在绳子上随机排列,每次调换两个旗子,最后使得旗子按照蓝白红进行排列
*
* @author kingdz
*
*/
public class Algo02 {
public static void main(String[] args) {
int[] number = new int[10];
genNumber(number);
System.out.println(Arrays.toString(number));
sort(number);
}
/**
* 排序三色旗
*
* @param number
*/
private static void sort(int[] number) {
int now = 0;
int start = 0;
while (now < 2) {
for (int i = start; i < number.length; i++) {
if (number[i] != now) {
start = i;
break;
}
}
if (start == -1) {
now = now + 1;
continue;
}
int end = -1;
for (int i = start + 1; i < number.length; i++) {
if (number[i] == now) {
end = i;
break;
}
}
if (end == -1) {
now = now + 1;
continue;
}
swap(number, start, end);
System.out.println(Arrays.toString(number));
}
}
/**
* 交换start和end的位置
*
* @param number
* @param start
* @param end
*/
private static void swap(int[] number, int start, int end) {
int tmp = number[start];
number[start] = number[end];
number[end] = tmp;
}
/**
* 生成随机的三色旗
*
* @param number
*/
private static void genNumber(int[] number) {
Random r = new Random(System.currentTimeMillis());
for (int i = 0; i < number.length; i++) {
number[i] = r.nextInt(3);
}
}
}
【算法】程序猿不写代码是不对的47
最新推荐文章于 2023-12-24 16:00:47 发布