/**
* Introduction to Algorithms, Second Edition
* 5.3 PERMUTE-BY-SORTING
* @author 土豆爸爸
*
*/
public class PermuteBySorting {
/**
* 数组随机重排
* @param array 待重排数组
*/
public static void permute(int[] array) {
//生成一个随机的数组
int[] p = new int[array.length];
for(int i = 0; i < array.length; i++) {
p[i] = (int)(Math.random() * Math.pow(array.length, 3));
}
//根据随机数组对目标数据进行排序
sort(array, p);
}
/**
* 根据p对array重排
* @param array 待重排数组
* @param p 随机数组
*/
private static void sort(int[] array, int[] p) {
for (int j = 1; j < p.length; j++) {
int key = p[j];
int i = j - 1;
while (i >= 0 && p[i] > key) {
p[i + 1] = p[i];
i--;
}
p[i + 1] = key;
int temp = array[j];
array[j] = array[i + 1];
array[i + 1] = temp;
}
}
}
import junit.framework.TestCase;
public class PermuteBySortingTest extends TestCase {
public void testPermute() {
int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int i = 0; i < array.length; i++) {
int[] clone = array.clone();
PermuteBySorting.permute(clone);
print(clone);
}
}
private void print(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]);
System.out.print(" ");
}
System.out.println();
}
}