`

java算法之———三色棋

阅读更多

package demo;

/**

 * Algorithm Gossip: 三色棋

 * 三色旗的问题最早由E.W.Dijkstra所提出,他所使用的用语为Dutch Nation Flag(Dijkstra为荷兰

 * 人),而多数的作者则使用Three-Color Flag来称之。

 * 假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,您

 * 希望将之分类,并排列为蓝、白、红的顺序,要如何移动次数才会最少,注意您只能在绳子上

 * 进行这个动作,而且一次只能调换两个旗子。

 * @author gaoq

 * @date 2015-5-13 下午10:55:36

 */

public class SanSeQi {

public static void main(String[] args) {

//假定:b-->蓝色,w-->白色,r-->红色

char[] data = new char[]{'a','w','r','b','b','r','w'};

System.out.println(new String(paixu(data)));

}

/**

* 排序

* @param data char数组

* @return char[]

*/

private static char[] paixu(char[] data){

int startIndex = 0;

int moveIndex = 0;

int endIndex = data.length-1;

while(moveIndex <= endIndex){

if(data[moveIndex] == 'b'){

exchangeIndex(data,startIndex,moveIndex);

startIndex ++;

}else if(data[moveIndex] == 'r'){

exchangeIndex(data,endIndex,moveIndex);

endIndex --;

}

moveIndex ++;

}

return data;

}

/**

* 独臂交换法

* @param data char数组

* @param idx1 下标1

* @param idx2 下标2

*/

private static void exchangeIndex(char[] data,int idx1,int idx2){

char temp = data[idx1];

data[idx1] = data[idx2];

data[idx2]=temp;

}

 

}

 

分享到:
评论

相关推荐

    JAVA课程设计——中国象棋java源代码

    总的来说,【JAVA课程设计——中国象棋java源代码】是一个综合性的项目,涵盖了Java语言的核心特性、面向对象设计、GUI编程、算法实现、多线程以及错误处理等多个方面。通过这个项目,开发者不仅可以深入理解Java...

    线性规划算法实现——Java版

    在Java编程环境下,我们可以构建一个线性规划算法来解决这些问题。以下是关于线性规划算法实现的详细解释: 1. **线性规划模型**:线性规划问题通常由以下部分组成: - 目标函数:我们需要最大化或最小化的函数,...

    神经网络算法与实现 ——基于Java语言 代码实例

    《神经网络算法与实现——基于Java语言 代码实例》是一本深入探讨神经网络编程的书籍,专注于使用Java语言实现各种神经网络模型。本书通过实际的代码示例,为读者提供了理解神经网络工作原理以及如何在Java环境下...

    Java开发的——网络、单机二合一——五子棋+源码

    本项目“Java开发的——网络、单机二合一——五子棋+源码”正是一个结合了网络对战和单机模式的五子棋游戏,其核心特点包括批处理调度运行、网络联机功能以及禁手和先手选择等策略性设置。 首先,让我们深入理解这...

    数据结构与算法分析——java语言描述(第二版) 习题答案

    数据结构与算法分析——Java语言描述(第二版)是普林斯顿大学Mark Allen Weiss的经典之作,但是网上很少能找到Java描述第二版的课后习题,连作者的个人主页也明确表示不提供课后习题,只能到出版商那里去索取,这个...

    java算法——二分法查找

    二分法查找 *进行二分法查找的前提是数组已有序 *查找范围的上下界

    java算法——冒泡排序

    * 冒泡排序: * 每次在无序队列里将相邻两个数一次进行比较, * 将小数调到前面,逐次比较,直至将最大的数移到 * 最后。将剩下的N-1个数继续比较,将次大数移至 * 倒数第二位。

    机器学习的数学理论及其算法研究——评《机器学习的数学理论》.pdf

    机器学习的数学理论及其算法研究——评《机器学习的数学理论》 机器学习是指计算机通过固有的规律性信息获得新的经验和知识,从而提升计算机的智能,达到像人类一样作出决策的目的。机器学习的数学理论是研究机器...

    文本比较算法Ⅰ——LD算法.doc

    文本比较算法Ⅰ——LD算法.doc

    java算法——选择排序

    选择排序: 每次在“无序”队列中选择“最小值”,放在有序队列最后,并从无序队列中删除该值。

    机器学习决策树算法中特征选项的算法实现——信息熵

    机器学习决策树算法中特征选项的算法实现——信息熵 首先我们将信息熵的定义进行阐述: 熵经验熵 我们这里以网上数据贷款申请为例:数据来自(https://blog.csdn.net/c406495762/article/details/75663451) 在...

    java算法——希尔排序

    按下标的一定增量分组,对每组使用直接插入算法排序;随着增量 * 逐渐减少,每组包含的关键字越来越多,当增量减至1时,整个文件恰 * 好被分成一组,算法便终止。 * 8,9,1,7,2,3,5,4,6,0 * //初始增量 gap=...

    java算法——稀疏矩阵

    稀疏矩阵 * 每个非零元素及其对应的行下标和列下标构成一个三元组, * 稀疏矩阵中所有这样的三元构成一个以三元组为数据... * 链表结构存储——三元链表中每个结点的数据域由稀疏矩阵非零元的行号、列号和元素值组成

    两个字符串的相似度算法实现——编辑距离之Levenshtein距离

    两个字符串的相似度算法实现——编辑距离之Levenshtein距离

    java算法——斐波那契数列

    斐波那契数列 *以兔子繁殖为例子而引入,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、…… * 在数学逻辑上以递归方法定义

Global site tag (gtag.js) - Google Analytics