选择排序
@Test
public void testSelectSort() {
int[] data = {1, 2, 5, 0, 2, 3, 4, 9};
for (int i = 0; i < data.length; i++) {
for (int j = i + 1; j < data.length; j++) {
if (data[j] < data[i]) {
int tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
}
System.out.println("No." + i + "->" + Arrays.toString(data));
}
System.out.println("Final:" + Arrays.toString(data));
}
@Test
public void testSelectSort2() {
int[] data = {1, 2, 5, 0, 2, 3, 4, 9};
for (int i = 0; i < data.length; i++) {
int min = i;
for (int j = i + 1; j < data.length; j++) {
if (data[j] < data[min]) {
min = j;
}
}
int tmp = data[i];
data[i] = data[min];
data[min] = tmp;
System.out.println("No." + i + "->" + Arrays.toString(data));
}
System.out.println("Final:" + Arrays.toString(data));
}
快速排序
@Test
public void testQuickSort() {
int[] arr = {10, 7, 2, 4, 7, 62, 3, 4, 2, 1, 8, 9, 19};
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr, int low, int high) {
int i, j, temp, t;
if (low > high) {
return;
}
i = low;
j = high;
//temp就是基准位
temp = arr[low];
while (i < j) {
//先看右边,依次往左递减
while (temp <= arr[j] && i < j) {
j--;
}
//再看左边,依次往右递增
while (temp >= arr[i] && i < j) {
i++;
}
//如果满足条件则交换
if (i < j) {
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
//最后将基准为与i和j相等位置的数字交换
arr[low] = arr[i];
arr[i] = temp;
//递归调用左半数组
quickSort(arr, low, j - 1);
//递归调用右半数组
quickSort(arr, j + 1, high);
}
/**
* 快排核心算法,递归实现
*
* @param array
* @param left
* @param right
*/
public static int sort(int[] array, int left, int right) {
// base中存放基准数
int base = array[left];
int i = left, j = right;
while (i < j) {
// 顺序很重要,先从右边开始往左找,直到找到比base值小的数
while (array[j] >= base && i < j) {
j--;
}
// 再从左往右边找,直到找到比base值大的数
while (array[i] <= base && i < j) {
i++;
}
// 上面的循环结束表示找到了位置或者(i>=j)了,交换两个数在数组中的位置
if (i < j) {
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
// 将基准数放到中间的位置(基准数归位)
array[left] = array[i];
array[i] = base;
return i;
// 递归,继续向基准的左右两边执行和上面同样的操作
// i的索引处为上面已确定好的基准值的位置,无需再处理
//sort(array, left, i - 1);
//sort(array, i + 1, right);
}