快速排序

一、快速排序的介绍
快速排序简单来说就是指先选择一个基准元素(默认第一个是基准元素),再去找到比基准元素大的元素,放在基准元素的右边,比基准元素小的放在基准元素的左边,再将找到的最后一个比基准元素小的元素与基准元素进行交换

动画演示的网址
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();
    }
}

posted @ 2024-10-23 11:16  你的镁偷走了我的锌  阅读(26)  评论(0)    收藏  举报