《编程珠玑》第二章 “杂技算法” 和 “翻转算法” Java语言版

《编程珠玑》第二章 “杂技算法” 和 “翻转算法”  Java语言版

之前一篇文章讲了http://blog.csdn.net/tcpipstack/article/details/8125759字符串翻转里面的 “杂技算法” 和 “翻转算法” 的C语言实现,最近完成了上述算法的Java实现,具体代码如下所示:


杂技算法源码:

package chapter2;

import java.util.ArrayList;
import java.util.List;

/**
 * Name:杂技算法
 * 
 * @author tcpipstack
 * @version 1.0
 * 
 */
public class AcrobatsArray {

	public AcrobatsArray() {
	}

	public List<String> rotation(List<String> list, int rotdist) {
		int m = gcd(rotdist, list.size());
		int j = 0;
		for (int i = 0; i < m; i++) {
			String temp = list.get(i);
			j = i;
			while (true) {

				int k = j + rotdist;
				if (k >= list.size()) {
					k -= list.size();
				}
				if (k == i) {
					break;
				}
				list.set(j, list.get(k));
				j = k;
			}
			list.set(j, temp);
		}
		return list;
	}

	/**
	 * Name: 求最大公约数(Greatest common divisor)
	 * 
	 * @param i
	 * @param j
	 * @return
	 */
	private int gcd(int i, int j) {
		while (i != j) {
			if (i > j) {
				i -= j;
			} else {
				j -= i;
			}
		}

		return i;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		AcrobatsArray strArr = new AcrobatsArray();
		MyList myList = new MyList();
		List<String> list = myList.createStringList(10);

		System.out.println("*****Before*****");
		myList.print(list);

		List<String> result = strArr.rotation(list, 3);

		System.out.println("\n*****After*****");
		myList.print(result);
	}

}


翻转算法源码:

package chapter2;

import java.util.ArrayList;
import java.util.List;

/**
 * 
 * Name: Inverse the array
 * 
 * @author tcpipstack
 * @version 1.0
 * 
 */
public class InverseArray {

	public InverseArray() {

	}

	/**
	 * Name: Inverse the elements of the list
	 * 
	 * @author long.luo
	 * @param list
	 * @param begin
	 * @param end
	 * @return list
	 */
	private List<String> reverseList(List<String> list, int begin, int end) {
		if (begin <= end) {
			for (int i = begin; i < end; i++, end--) {
				if (i < end - 1) {
					String temp = list.get(i);
					list.set(i, list.get(end - 1));
					list.set(end - 1, temp);
				}
			}
		}

		return list;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		MyList myList = new MyList();
		List<String> list = myList.createStringList(10);

		System.out.println("*****Before*****");
		myList.print(list);

		InverseArray inverseArray = new InverseArray();
		inverseArray.reverseList(list, 0, 5);
		inverseArray.reverseList(list, 5, 10);
		inverseArray.reverseList(list, 0, 10);

		System.out.println("\n*****After*****");
		myList.print(list);
	}
}

class MyList {
	public MyList() {
	}

	/**
	 * Name:产生String类型的list
	 * 
	 * @author long.luo
	 * @param length
	 * @return
	 */
	public List<String> createStringList(int length) {
		List<String> list = new ArrayList<String>();

		for (int i = 0; i < length; i++) {
			list.add(String.valueOf(i));
		}

		return list;
	}

	/**
	 * Name:print the list elements
	 * 
	 * @author long.luo
	 * @param list
	 */
	public void print(List<String> list) {
		for (int i = 0; i < list.size(); i++) {
			System.out.printf("   " + list.get(i));
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值