/**
* 快速排序
* 思路:选择中间数作为基准,然后i从左向右找到第一个大于等于这个基准的数,j从右向左找到第一个小于等于该基准的数,直到i>=j,交换这两个数。
* 然后递归对左边i个数和右边n-1-i个数进行相同排序。
*/
public int[] quickSort(int[] iAry, int left, int right) {
if (left < right) {
int midNum = iAry[(left + right) / 2];
int i = left - 1;
int j = right + 1;
while (true) {
while (iAry[++i] < midNum);
while (iAry[--j] > midNum);
if (i >= j) {
break;
}
swap(iAry, i, j);
}
quickSort(iAry, left, i - 1);
quickSort(iAry, j + 1, right);
}
return iAry;
}
private int[] createAry() {
Random rand = new Random();
int[] ary = new int[5];
for (int i = 0; i < ary.length; i++) {
ary[i] = rand.nextInt(100);
}
return ary;
}
private void printAry(int[] ary) {
System.out.println(Arrays.toString(ary));
}
private void swap(int[] iAry, int num1, int num2) {
int temp = iAry[num1];
iAry[num1] = iAry[num2];
iAry[num2] = temp;
}
@Test
public void sortTest() {
int[] iAry = createAry();
System.out.print("原始数组:");
printAry(iAry);
iAry = bubbleSort(iAry);
System.out.print("冒泡排序后的数组:");
printAry(iAry);
iAry = selectSort(iAry);
System.out.print("选择排序后的数组:");
printAry(iAry);
iAry = insertSort(iAry);
System.out.print("插入排序后的数组:");
printAry(iAry);