Java排序算法中的快速排序算法实现

 更新时间:2023年12月12日 08:57:07   作者:warybee  
这篇文章主要介绍了Java排序算法中的快速排序算法实现,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,需要的朋友可以参考下

Java快速排序算法

1.介绍

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

2.排序原理

如果要排序数组(int[p--r])中下标从 p 到 r 之间的一组数据,我们选择 p 到 r 之间的任意一个数据作为 pivot(分区点),遍历 p 到 r 之间的数据,将小于 pivot 的放到左边,将大于 pivot 的放到右边,将 pivot 放到中间。经过这一步骤之后,数组 p 到 r 之间的数据就被分成了三个部分,前面 p 到 q-1 之间都是小于 pivot 的,中间是 pivot,后面的 q+1 到 r 之间是大于 pivot 的。然后再使用递归,排序从 下标p 到 q-1 之间的数据和从下标 q+1 到 r 之间的数据,直到区间缩小为 1,就说明所有的数据都有序了。

在这里插入图片描述

3.代码实现

基于java实现(没有使用java的一些高级语言,可以扩展为你熟悉的语言)

public static void main(String[] args) {
        int[] array=new int[]{6,4,3,2,7,9,5};
        quickSort(array,0,array.length-1);
        System.out.println(array.length);
    }
    public static void   quickSort(int[] array, int p, int r) {
        //递归结束条件
        if (p>=r) return;
         int q=partition(array, p, r); // 获取分区点
        quickSort(array,  p, q-1);
        quickSort(array, q+1, r);
    }
    //获取分区点
    private static int partition(int[] array, int p, int r) {
        int pivot=array[r];//选取数组中最后一个作为分区点
        int i=p;//分区点下标索引,默认为数组的开始位置
        //遍历数组,依次与pivot比较,小于pivot的放到左侧,大于pivot的在右侧
        for (int j=p;j<r;j++){
            if (array[j]<pivot){
                int tmp=array[j];
                array[j]=array[i];
                array[i]=tmp;
                i++;
            }
        }
        //把数组的最后一个元素(pivot 分区点)拷贝到具体,分区点对应位置
        int tmp=array[r];
        array[r]=array[i];
        array[i]=tmp;
        return i;
    }

4.时间复杂度

  • 最好情况:T(n) = O(nlogn)
  • 最坏情况:T(n) = O(n^2)
  • 平均情况:T(n) = O(nlogn)

到此这篇关于Java排序算法中的快速排序算法实现的文章就介绍到这了,更多相关Java快速排序算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 云IDE:Eclipse Che:Eclipse下一代IDE(推荐)

    云IDE:Eclipse Che:Eclipse下一代IDE(推荐)

    这篇文章主要介绍了云IDE:Eclipse Che:Eclipse下一代IDE,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Spring MVC--拦截器实现和用户登陆例子

    Spring MVC--拦截器实现和用户登陆例子

    本文主要介绍了Spring MVC--拦截器实现和用户登陆例子,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-03-03
  • 在Spring Boot中从类路径加载文件的示例

    在Spring Boot中从类路径加载文件的示例

    创建Spring Boot Web应用程序时,有时有时需要从类路径中加载文件;war和jar的加载文件格式是不一样的,在下面,您将找到在WAR和JAR中加载文件的解决方案。
    2020-10-10
  • 处理java异步事件的阻塞和非阻塞方法分析

    处理java异步事件的阻塞和非阻塞方法分析

    这篇文章主要介绍了处理java异步事件的阻塞和非阻塞方法分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,阻塞与非阻塞关注的是交互双方是否可以弹性工作。,需要的朋友可以参考下
    2019-06-06
  • Java的Spring框架中DAO数据访问对象的使用示例

    Java的Spring框架中DAO数据访问对象的使用示例

    这篇文章主要介绍了Java的Spring框架中DAO数据访问对象的使用示例,分为在Spring中DOA与JDBC以及与Hibernate的配合使用两种情况来进行演示,需要的朋友可以参考下
    2016-03-03
  • MybatisPlus使用Mybatis的XML的动态SQL的功能实现多表查询

    MybatisPlus使用Mybatis的XML的动态SQL的功能实现多表查询

    本文主要介绍了MybatisPlus使用Mybatis的XML的动态SQL的功能实现多表查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

    SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

    MyBatis-Plus 是 MyBatis 的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方式,包括常规的 SQL 查询、Lambda Query 查询、分页查询、条件查询等,在本篇博客中,我们将详细讲解如何使用 MyBatis-Plus 的各种查询方式,需要的朋友可以参考下
    2025-01-01
  • java解析json复杂数据的方法详解

    java解析json复杂数据的方法详解

    这篇文章主要为大家详细介绍了java解析json复杂数据的两种常用方法,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以了解下
    2024-01-01
  • Java 中的 super 关键字用法指南

    Java 中的 super 关键字用法指南

    Java中super关键字用于调用父类构造方法和访问成员,隐式调用无参构造,显式调用有参构造,若父类无无参构造,子类必须显式调用super,以确保正确初始化,本文介绍Java中的super关键字用法指南,感兴趣的朋友一起看看吧
    2025-07-07
  • Java面向对象之成员隐藏与属性封装操作示例

    Java面向对象之成员隐藏与属性封装操作示例

    这篇文章主要介绍了Java面向对象之成员隐藏与属性封装操作,结合实例形式分析了Java面向对象程序设计中成员的隐藏及属性封装相关实现与使用操作技巧,需要的朋友可以参考下
    2018-06-06

最新评论