1.什么是快速排序
快速排序算法中,每一次递归时以第一个数为基准数,找到数组中所有比基准数小的.再找到所有比基准数大的. 小的全部放左边,大的全部放右边,确定基准数的正确位置
2.快速排序需求
将数组int[] arr = {7, 1, 2, 6, 9, 8, 4, 5, 10, 3};;用快速排序法按照从小到大的顺序进行排列。
3.快速排序实现步骤
(1)从右开始找比基准数小的
while(arr[right] >= baseNumber && right > left){
right--;
}
(2)从左开始找比基准数大的
while(arr[left] <= baseNumber && right > left){
left++;
}
(3)交换两个值的位置
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
(4)红色的箭头继续往左找,蓝色继续往右找,直到两个箭头指向同一个索引为止
(5)基准数归位
int temp = arr[left];
arr[left] = arr[left0];
arr[left0] = temp;
4.快速排序完整代码实现
public class quickSortDemo {
public static void main(String[] args) {
//1,从右开始找比基准数小的
//2,从左开始找比基准数大的
//3,交换两个值的位置
//4,红色继续往左找,蓝色继续往右找,直到两个箭头指向同一个索引为止
//5,基准数归位
int[] arr = {7, 1, 2, 6, 9, 8, 4, 5, 10, 3};
quiteSort(arr,0,arr.length-1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
private static void quiteSort(int[] arr, int left, int right) {
if(right < left){
return;
}
int left0 = left;
int right0 = right;
//计算出基准数
int baseNumber = arr[left0];
while(left != right){
//1,从右开始找比基准数小的
while(arr[right] >= baseNumber && right > left){
right--;
}
//2,从左开始找比基准数大的
while(arr[left] <= baseNumber && right > left){
left++;
}
//3,交换两个值的位置
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
//基准数归位
int temp = arr[left];
arr[left] = arr[left0];
arr[left0] = temp;
quiteSort(arr,left0,left-1);
quiteSort(arr,left +1,right0);
}
}