一、快速排序的介绍
快速排序简单来说就是指先选择一个基准元素(默认第一个是基准元素),再去找到比基准元素大的元素,放在基准元素的右边,比基准元素小的放在基准元素的左边,再将找到的最后一个比基准元素小的元素与基准元素进行交换
动画演示的网址
https://visualgo.net/en/sorting
二、代码进行演示
/*
快速排序指的是先选择一个基准元素,再去找到比基准元素大的元素,放在基准元素的右边,比基准元素小的放在基准元素的左边
先定义左右边界,找到所有比基准大的值和比基准小的值,进行交换,大的值从左边往右边去找,小的值从右边往左边去找。
*/
public class KuaiSuTest2 {
public static void main(String[] args) {
int arr[] = new int[]{7, 3, 9, 4, 8};
System.out.print("初始数组: ");
printArray(arr);
// 非递归快速排序
int left = 0;
int right = arr.length - 1;
// 使用循环处理所有区间
while (left < right) {
int pivot = arr[left]; // 选择基准元素
int a = left + 1; // a 指向基准右边的元素
int b = right; // b 指向数组右端
// 开始划分
while (a <= b) {
// 找到比基准大的值
while (a <= right && arr[a] <= pivot) {
a++;
}
// 找到比基准小的值
while (b >= left && arr[b] > pivot) {
b--;
}
// 当 a 和 b 不相遇时交换
if (a < b) {
// 交换 arr[a] 和 arr[b]
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}
// 交换基准元素与 b 指向的元素
arr[left] = arr[b];
arr[b] = pivot;
// 输出当前状态
System.out.print("当前数组状态: ");
printArray(arr);
// 更新指针,确保两个子数组都被处理
// 处理右边部分
if (b + 1 < right) {
left = b + 1; // 处理右边部分
} else {
// 处理左边部分
right = b - 1; // 更新右边界处理左边部分
left = 0; // 重置左边界以继续处理
}
}
// 输出最终的排序结果
System.out.print("快速排序后的数组: ");
printArray(arr);
}
// 打印数组的辅助方法
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
标签:arr,int,基准,元素,排序,快速,left
From: https://www.cnblogs.com/ndmtzwdx/p/18495967