第三十三章Java快速排序法

这篇具有很好参考价值的文章主要介绍了第三十三章Java快速排序法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        快速排序(Quicksort)是对冒泡排序的一种改进,是一种排序执行效率很高的排序算法。

        快速排序的基本思想是:通过一趟排序,将要排序的数据分隔成独立的两部分,其中一部分的所有数据比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此使整个数据变成有序序列。

        具体做法是:假设要对某个数组进行排序,首先需要任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它的前面,所有比它大的数都放到它的后面。这个过程称为一趟快速排序;递归调用此过程,即可实现数据的快速排序。

例 1:利用快速排序法对一数组进行排序,实现步骤如下。

        (1) 声明静态的 getMiddle() 方法,该方法需要返回一个 int 类型的参数值,在该方法中传入 3 个参数。代码如下:
public static int getMiddle(int[] list, int low, int high) {
    int tmp = list[low]; // 数组的第一个值作为中轴(分界点或关键数据)
    while (low < high) {
        while (low < high && list[high] > tmp) {
            high--;
        }
        list[low] = list[high]; // 比中轴小的记录移到低端
        while (low < high && list[low] < tmp) {
            low++;
        }
        list[high] = list[low]; // 比中轴大的记录移到高端
    }
    list[low] = tmp; // 中轴记录到尾
    return low; // 返回中轴的位置
}

         (2) 创建静态的 unckSort() 方法,在该方法中判断 low 参数是否小于 high 参数,如果是则调用 getMiddle() 方法,将数组一分为二,并且调用自身的方法进行递归排序。代码如下:
    public static void unckSort(int[] list,int low,int high) {
        if(low < high) {
            int middle = getMiddle(list,low,high);    // 将list数组一分为二
            unckSort(list,low,middle-1);    // 对低字表进行递归排序
            unckSort(list,middle+1,high);    // 对高字表进行递归排序
        }
    }
         (3) 声明静态的 quick() 方法,在该方法中判断传入的数组是否为空,如果不为空,则调用 unckSort() 方法进行排序。代码如下:
    public static void quick(int[] str) {
        if(str.length > 0) {
            // 查看数组是否为空
            unckSort(str,0,str.length-1);
        }
    }
         (4) 在 main() 方法中声明 int 类型的 number 数组,接着输出该数组中的元素。然后调用自定义的 quick() 方法进行排序,排序后重新输出数组中的元素。代码如下:
    int[] number={13,15,24,99,14,11,1,2,3};
    System.out.println("排序前:");
    for(int val:number) {
        System.out.print(val+" ");
    }
    quick(number);
    System.out.println("\n排序后:");
    for(int val:number) {
        System.out.print(val +" ");
    }
运行前面的代码进行测试,输出结果如下:
排序前:
13 15 24 99 14 11 1 2 3
排序后:
1 2 3 11 13 14 15 24 99 

文章来源地址https://www.toymoban.com/news/detail-507620.html

到了这里,关于第三十三章Java快速排序法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【正点原子STM32连载】第三十三章 单通道ADC采集实验 摘自【正点原子】APM32E103最小系统板使用指南

    1)实验平台:正点原子APM32E103最小系统板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 本章介绍使用APM32E103模数转换器(ADC)进行带通道的电压采集。通过本章的学习,读者将学习到单通

    2024年02月19日
    浏览(43)
  • 快速排序QuickSort

    目录 1.Hoare法 2.挖坑法 3.前后指针法 4.快排分治 5.关于快排  6.关于快排的优化 7.总体实现 总结: 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法 其基本思想为:任 取 待排序元素序列中的某元素作为 基准值 ,按照该排序码将待排序集合 分割成两子序列 ,左子

    2024年02月15日
    浏览(25)
  • 【从零开始学习JAVA | 第三十三篇】File类

    目录 前言: File类: 构造方法: 常见成员方法: 总结:         本文我们将为大家介绍JAVA中一个比较使用的类:File类,他为我们提供了存储数据的功能,使得程序的数据不至于在运行结束之后就丢失,是一个很好的类。         File类是Java标准库中用于操作文件和目录

    2024年02月15日
    浏览(32)
  • 算法 in Golang:Quicksort(快速排序)

    快速排序 O(nlog2^n),比选择排序要快 O(n²) 在日常生活中经常使用 使用了 D C 策略(分而治之) 不需要排序的数组(也就是 Base Case 基线条件): [],空数组 [s],单元素数组 很容易排序的数组: [a, b],两个元素的数组,只需检查它们之间的大小即可,调换位置 3 个元素的数组

    2024年02月08日
    浏览(25)
  • 【正点原子FPGA连载】 第三十三章基于lwip的tftp server实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

    文件传输是网络环境中的一项基本应用,其作用是将一台电子设备中的文件传输到另一台可能相距很远的电子设备中。TFTP作为TCP/IP协议族中的一个用来在客户机与服务器之间进行文件传输的协议,常用于无盘工作站、路由器以及远程测控设备从主机上获取引导配置文件,实现

    2024年02月12日
    浏览(29)
  • 【Linux】第三十三站:日志

    我们运行代码的时候,我们希望有各种各样的运行时候的一些信息。这也就是日志 它一半有日志时间,日志的等级,日志的内容,文件的名称和行号。 对于日志等级一半有如下的 Info : 常规消息 Warning : 报警信息 Error : 比较严重了,可能需要立即处理 Fatal : 致命的 Debug : 调试

    2024年01月22日
    浏览(35)
  • 学C的第三十三天【C语言文件操作】

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 学C的第三十二天【动态内存管理】_高高的胖子的博客-CSDN博客  =====================================

    2024年02月13日
    浏览(27)
  • 第三章 图论 No.13拓扑排序

    拓扑序和DAG有向无环图联系在一起,通常用于最短/长路的线性求解 裸题:1191. 家谱树 1191. 家谱树 - AcWing题库 差分约束+拓扑排序:1192. 奖金 1192. 奖金 - AcWing题库 由于图中所有边权都是正数,可以直接使用topsort求解差分约束问题 根据题意,要求一个最小值,使用最长路求解

    2024年02月12日
    浏览(30)
  • 【日常Exception】第三十三回:Flink运行jar包报错NoSuchMethodError: org.apache.flink.api.common.functions.Runtime....

    主要报错内容: java.lang.NoSuchMethodError: org.apache.flink.api.common.functions.RuntimeContext.getMetricGroup()Lorg/apache/flink/metrics/MetricGroup; 报错全量信息: 原因: 升级后使用的flink安装版本是1.14.5,而我的jar包中是使用的1.13.2 解决: 将jar包中的pom中flink的依赖版本,也换成1.14.5,与服务器上

    2024年02月16日
    浏览(36)
  • 【Microsoft Azure 的1024种玩法】三十三.十分钟快速部署 Azure Kubernetes Service 群集

    Azure Kubernetes 服务 (AKS) 通过将操作开销卸载到 Azure,简化了在 Azure 中部署托管 Kubernetes 群集的过程。 作为一个托管的 Kubernetes 服务,Azure 可以自动处理运行状况监视和维护等关键任务,本篇文章要分享的内容是如何在Azure中使用十分钟快速部署 Azure Kubernetes Service 群集 【Mi

    2024年02月05日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包