代码改变世界

Java全排列排序

2015-10-31 13:55  tony4geek  阅读(250)  评论(0编辑  收藏  举报

全排列算法,递归的实现


public class AllSort {
	public static void main(String[] args) {
		String str[] = { "1", "2", "3" };
		permutation(str, 0, str.length);
	}

	static void swap(String[] str, int start, int end) {
		String tmep = str[start];
		str[start] = str[end];
		str[end] = tmep;
	}

	static void permutation(String[] str, int start, int end) {
 //判断是否遍历完
		if (start == end - 1) {
			 for (int i = 0; i < end; i++) {
			 System.out.print(str[i]);
			 }
			System.out.println();
		} else {
			for (int i = start; i < end; i++) {
				swap(str, start, i);
				permutation(str, start + 1, end);//后续遍历
                                //还原遍历的结果  
				swap(str, start, i);
			}

		}
	}
}

Java排序

		int[] array = new int[] { 34, 68, 1, 832, 5, 87 };
		// 冒泡排序
		for (int i = 0; i < array.length - 1; i++) {
			for (int j = i + 1; j < array.length; j++) {
				if (array[i] > array[j]) {
					int temp = array[i];
					array[i] = array[j];
					array[j] = temp;

				}
			}
		}

		// 插入排序 每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置,直到全部插入排序完为止。
		// 关键问题:在前面已经排好序的序列中找到合适的插入位置。
		int j, temp;
		for (int i = 1; i < array.length; i++) {
			temp = array[i];
			for (j = i; j > 0 && temp < array[j - 1]; j--) {
				array[j] = array[j - 1];
			}
			array[j] = temp;
		}

		// 选择排序 首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换;
		// 再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,将它与第二个记录交换;
		// 重复上述操作,共进行n-1趟排序后,排序结束。

		int postion, temp;
		for (int i = 0; i < array.length; i++) {
			postion = i;
			for (int j = array.length - 1; j > i; j--) {
				if (array[j] < array[postion]) {
					postion = j;
				}
			}
			temp = array[i];
			array[i] = array[postion];
			array[postion] = temp;
		}