Java数据结构与算法:排序算法之快速排序

Java数据结构与算法:排序算法之快速排序

大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,大家都知道,冬天来了,虽然温度逐渐下降,但对于我们这群程序猿而言,风度永远不能减少。今天,我们将探索Java中一种高效且广泛使用的排序算法——快速排序,解密这个排序奥秘。

快速排序简介

快速排序是一种基于分治思想的排序算法,通过选取一个基准元素,将序列分成两个子序列,分别对左右两个子序列进行排序,从而达到整个序列有序的目的。快速排序的关键在于分区(Partition),即将序列分成两部分,使得左边的元素都小于基准元素,右边的元素都大于基准元素。

快速排序的基本步骤

  1. 选择基准元素: 从待排序序列中选择一个元素作为基准。

  2. 分区: 将序列中小于基准元素的元素放在左边,大于基准元素的元素放在右边。

  3. 递归排序: 对左右两部分分别进行递归排序。

快速排序Java实现

下面是一个简单的Java代码示例,演示了如何使用快速排序对一个整型数组进行升序排序:

public class QuickSort {
    public static void main(String[] args) {
        int[] array = {64, 34, 25, 12, 22, 11, 90};

        // 打印排序前的数组
        System.out.println("排序前的数组:" + Arrays.toString(array));

        // 执行快速排序
        quickSort(array, 0, array.length - 1);

        // 打印排序后的数组
        System.out.println("排序后的数组:" + Arrays.toString(array));
    }

    // 快速排序算法实现
    static void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            // 获取分区点,arr[p]现在已经在正确的位置
            int p = partition(arr, low, high);

            // 对分区点左右两部分进行递归排序
            quickSort(arr, low, p - 1);
            quickSort(arr, p + 1, high);
        }
    }

    // 分区操作
    static int partition(int[] arr, int low, int high) {
        // 选择最右边的元素作为基准
        int pivot = arr[high];

        // 指向小于基准的元素的位置
        int i = low - 1;

        // 从左到右遍历数组,将小于基准的元素放在左边
        for (int j = low; j < high; j++) {
            if (arr[j] <= pivot) {
                i++;
                swap(arr, i, j);
            }
        }

        // 将基准元素放在正确的位置
        swap(arr, i + 1, high);

        // 返回分区点的位置
        return i + 1;
    }

    // 交换数组中两个元素的位置
    static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

快速排序的时间复杂度

快速排序的平均时间复杂度为O(n log n),其中n是待排序序列的长度。尽管在最坏情况下可能达到O(n^2),但通过合理选择基准元素和优化分区算法,快速排序在实践中表现出色。

通过这篇文章,你应该对快速排序有了更深入的理解。在后续的学习中,我们将继续分享更多有趣的Java排序算法,敬请期待!

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值