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

简介: 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排序算法,敬请期待!

相关文章
|
3天前
|
搜索推荐 算法 Java
Java数据结构与算法:排序算法之插入排序
Java数据结构与算法:排序算法之插入排序
|
3天前
|
搜索推荐 算法 Java
Java数据结构与算法:排序算法之冒泡排序
Java数据结构与算法:排序算法之冒泡排序
|
3天前
|
搜索推荐 算法 Java
Java数据结构与算法:排序算法之归并排序
Java数据结构与算法:排序算法之归并排序
|
3天前
|
搜索推荐 算法 Java
Java数据结构与算法:排序算法之选择排序
Java数据结构与算法:排序算法之选择排序
|
4天前
|
机器学习/深度学习 自然语言处理 算法
m基于深度学习的OFDM+QPSK链路信道估计和均衡算法误码率matlab仿真,对比LS,MMSE及LMMSE传统算法
**摘要:** 升级版MATLAB仿真对比了深度学习与LS、MMSE、LMMSE的OFDM信道估计算法,新增自动样本生成、复杂度分析及抗频偏性能评估。深度学习在无线通信中,尤其在OFDM的信道估计问题上展现潜力,解决了传统方法的局限。程序涉及信道估计器设计,深度学习模型通过学习导频信息估计信道响应,适应频域变化。核心代码展示了信号处理流程,包括编码、调制、信道模拟、降噪、信道估计和解调。
26 8
|
6天前
|
算法
基于GA遗传优化的混合发电系统优化配置算法matlab仿真
**摘要:** 该研究利用遗传算法(GA)对混合发电系统进行优化配置,旨在最小化风能、太阳能及电池储能的成本并提升系统性能。MATLAB 2022a用于实现这一算法。仿真结果展示了一系列图表,包括总成本随代数变化、最佳适应度随代数变化,以及不同数据的分布情况,如负荷、风速、太阳辐射、弃电、缺电和电池状态等。此外,代码示例展示了如何运用GA求解,并绘制了发电单元的功率输出和年变化。该系统原理基于GA的自然选择和遗传原理,通过染色体编码、初始种群生成、适应度函数、选择、交叉和变异操作来寻找最优容量配置,以平衡成本、效率和可靠性。
|
7天前
|
机器学习/深度学习 算法
基于鲸鱼优化的knn分类特征选择算法matlab仿真
**基于WOA的KNN特征选择算法摘要** 该研究提出了一种融合鲸鱼优化算法(WOA)与K近邻(KNN)分类器的特征选择方法,旨在提升KNN的分类精度。在MATLAB2022a中实现,WOA负责优化特征子集,通过模拟鲸鱼捕食行为的螺旋式和包围策略搜索最佳特征。KNN则用于评估特征子集的性能。算法流程包括WOA参数初始化、特征二进制编码、适应度函数定义(以分类准确率为基准)、WOA迭代搜索及最优解输出。该方法有效地结合了启发式搜索与机器学习,优化特征选择,提高分类性能。
|
18小时前
|
算法 安全 数据库
基于结点电压法的配电网状态估计算法matlab仿真
**摘要** 该程序实现了基于结点电压法的配电网状态估计算法,旨在提升数据的准确性和可靠性。在MATLAB2022a中运行,显示了状态估计过程中的电压和相位估计值,以及误差随迭代变化的图表。算法通过迭代计算雅可比矩阵,结合基尔霍夫定律解决线性方程组,估算网络节点电压。状态估计过程中应用了高斯-牛顿或莱文贝格-马夸尔特法,处理量测数据并考虑约束条件,以提高估计精度。程序结果以图形形式展示电压幅值和角度估计的比较,以及估计误差的演变,体现了算法在处理配电网状态估计问题的有效性。
|
2天前
|
机器学习/深度学习 存储 算法
基于SFLA算法的神经网络优化matlab仿真
**摘要:** 使用MATLAB2022a,基于SFLA算法优化神经网络,降低训练误差。程序创建12个神经元的前馈网络,训练后计算性能。SFLA算法寻找最优权重和偏置,更新网络并展示训练与测试集的预测效果,以及误差对比。SFLA融合蛙跳与遗传算法,通过迭代和局部全局搜索改善网络性能。通过调整算法参数和与其他优化算法结合,可进一步提升模型预测精度。
|
7天前
|
机器学习/深度学习 算法 数据可视化
基于BP神经网络的64QAM解调算法matlab性能仿真
**算法预览图省略** MATLAB 2022A版中,运用BP神经网络进行64QAM解调。64QAM通过6比特映射至64复数符号,提高数据速率。BP网络作为非线性解调器,学习失真信号到比特的映射,对抗信道噪声和多径效应。网络在处理非线性失真和复杂情况时展现高适应性和鲁棒性。核心代码部分未显示。