快速排序:
6 1 2 7 9 3 4 5 10 8
先定义两个变量 i j
i->最左边数 j->最右边数 先让j先动
让6为基数
j往左移动 找小于6的数 j--
i往右移动 找大于6的数i++
i j
6 1 2 7 9 3 4 5 10 8
i j
6 1 2 7 9 3 4 5 10 8 i>j 7 5 交换
i j
6 1 2 5 9 3 4 7 10 8
i j
6 1 2 5 9 3 4 7 10 8 i>j 9 4 交换
i j
6 1 2 5 4 3 9 7 10 8
i
j
6 1 2 5 4 3 9 7 10 8 此次交换结束 基数6 3 交换
3 1 2 5 4 6 9 7 10 8 再分别处理6左右两边数
3 1 2 5 4 定义3为基数
i j
3 1 2 5 4
i
j
3 1 2 5 4 基数3 2 交换
2 1 3 5 4
i j
2 1 3 5 4 基数2 i>j 2 1交换
i j
1 2 3 5 4 基数5 i>j 5 4交换
1 2 3 4 5
6 9 7 10 8 也一样
6 7 8 9 10
代码实现:
public class QuckSort { public static void main(String[] args) { int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8}; quicksort(arr, 0, arr.length - 1); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } } public static void quicksort(int[] arr, int low, int height) { int i, j, temp, t; if (low > height) { return; } i = low; j = height; temp = arr[low];//基数 while (i < j) { while (arr[j] >= temp && i < j) { j--; } while (arr[i] <= temp && i < j) { i++; } if (i < j) { t = arr[j]; arr[j] = arr[i]; arr[i] = t; } } arr[low] = arr[i];//基数填入最后一个 arr[i] = temp; quicksort(arr, low, j - 1);//递归 quicksort(arr, j + 1, height); } }