/**
* 快速排序
* 思路:以数组的第一个值作为基准,首先从右到左,找到第一个小于基准的值,然后在从左到右,找到第一个大于基准的值,两个交换,
* 然后就行左右移动,到相遇为止,将相遇位置的值跟基准交换,第一轮完成。这个时候,数组一分为二,左边是小于基准的,右边是大于
* 基准的,然后两边数组继续这样比较。
*/
private void fastsort(int[] array, int low, int high) {
if (low > high) {
return;
}
int t;
int i = low;
int j = high;
// 基准点
int temp = array[low];
while (i < j) {
//先看右边,依次往左递减(该循环会找到右边第一个小于基准的值)
while (array[j] >= temp && i < j) {
j--;
}
//看左边,依次往右递增(该循环会找到左边第一个大于基准的值)
while (array[i] <= temp && 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;
//递给左边数组
fastsort(arr, low, j - 1);
//递归调用右半数组
fastsort(arr, j + 1, high);
}
fastsort(arr, 0, arr.length - 1);
fastsortTv.setText(Arrays.toString(arr));