/** 快排SortTest01 */
public class SortTest01 {
public static void main(String[] args) {
/** 1.快排算法中,每一次递归以第一个数为基准数,找到数组中所有比基数小的,再找到所有比基准数大的。小的全部放左边,大的全部放右边,确定基准数的正确位置 */
/*
*步骤
* 1.从右边开始找比基数小的
* 2.从左边开始找比基数大的 arrys[left]
* 3.交换两个值的位置
* 4.红色继续往左找,蓝色继续往右找,直到两个箭头指向同一个索引为止
* 5.基准数归位
*/
// 定义数组
int[] arrys = {6, 5, 3, 9, 1, 8, 10, 4, 7, 2};
quitSort(arrys, 0, arrys.length - 1);
System.out.println(Arrays.toString(arrys));
}
/**
* @param arrys 排序数组
* @param left 最小索引
* @param right 最大索引
* @return
*/
private static void quitSort(int[] arrys, int left, int right) {
if (right < left) {
return;
}
// 临时存储
int left0 = left;
int right0 = right;
// 计算基准数
int baseNumber = arrys[left0];
// 4.红色继续往左找,蓝色继续往右找,直到两个箭头指向同一个索引为止
while (left != right) {
// 1.从右边开始找比基数小的
while (arrys[right] >= baseNumber && left < right) {
// 没有找到 继续找
right--;
}
// 结束while代表找到了基数小的 此时 arrys[right]
// 2.从左边开始找比基数大的 arrys[left]
while (baseNumber >= arrys[left] && left < right) {
// 没有找到,继续找
left++;
}
// 3.交换两个值的位置
int temp = arrys[right];
arrys[right] = arrys[left];
arrys[left] = temp;
}
// 5.基准数归位
int temp = arrys[left];
arrys[left] = arrys[left0];
arrys[left0] = temp;
quitSort(arrys,left0,left-1);
quitSort(arrys,left + 1 ,right0);
}
}
//实现冒泡算法