快速排序算法原理及java递归实现

yizhihongxing

快速排序算法原理及java递归实现

快速排序是一种常用的排序算法,最好的情况下时间复杂度为 O(nlogn)。快速排序采用分治法的思想,具体过程如下:

1.选定一个基准元素,通常选择第一个或最后一个元素;

2.设置两个指针,一个指向起始位置,一个指向终止位置;

3.从后往前查找,找到第一个小于基准元素的位置并记录下来;

4.从前往后查找,找到第一个大于基准元素的位置并记录下来;

5.交换这两个位置上的元素;

6.继续向后查找并交换元素,直到左右指针相遇;

7.经过以上步骤后,所有小于基准元素的元素都在左侧,大于基准元素的元素都在右侧;

8.递归地对左右两侧进行快速排序。

Java递归实现代码

public static void quickSort(int[] arr, int left, int right){
    if(left >= right){
        return;
    }
    int index = partition(arr, left, right);
    quickSort(arr, left, index-1);
    quickSort(arr, index+1, right);
}

public static int partition(int[] arr, int left, int right){
    int pivot = arr[left];
    int i = left + 1;
    int j = right;
    while(i <= j){
        while(i <= j && arr[i] < pivot){
            i++;
        }
        while(i <= j && arr[j] > pivot){
            j--;
        }
        if(i <= j){
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            i++;
            j--;
        }
    }
    arr[left] = arr[j];
    arr[j] = pivot;
    return j;
}

示例说明

假设现在有一个无序数组 {6, 2, 9, 3, 7},进行快速排序的过程如下:

1.首先选定基准元素为6,即数组的第一个元素;

2.设置左指针l为2,右指针r为7;

3.从后往前查找,找到第一个小于6的元素,即3,将3与6交换位置;此时数组变为{3, 2, 9, 6, 7};

4.从前往后查找,找到第一个大于6的元素,即9,将9与6交换位置;此时数组变为{3, 2, 6, 9, 7};

5.左指针l=2,右指针r=8,继续步骤3,找到第一个小于6的元素2,将2与6交换位置;此时数组变为{3, 2, 6, 9, 7};

6.左指针l=3,右指针r=6,左右指针相遇,一轮排序完毕;

7.递归地对左侧数组{3, 2}和右侧数组{9, 7}重复以上步骤,直到数组有序。

此时数组变为 {2, 3, 6, 7, 9}。

在实现过程中,还需要考虑一些细节问题,例如如何选择基准元素,以及如何处理重复元素等,但基本的思想和实现方法和上面介绍的是一样的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:快速排序算法原理及java递归实现 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • java8新特性教程之time包使用总结

    Java8新特性教程之time包使用总结 Java8引入了java.time包,为Java的日期和时间处理提供了全新的API。新的API包括了很多改进和新增的功能,例如: 新的日期和时间API更加安全; 新的日期和时间API更加简单,提升了开发效率; 新的日期和时间API实现了时区处理,并且更加清晰易懂; 新的日期和时间API提供了可读性更强的代码。 Jav…

    Java 2023年5月20日
    00
  • 利用apache ftpserver搭建ftp服务器的方法步骤

    当您想要在本地或远程计算机上快速共享文件时,FTP服务器是一种非常有用的工具。Apache FTP服务器是一个优秀的FTP软件,拥有强大的安全功能,易于配置。 以下是利用Apache FTP服务器搭建FTP服务器的步骤,包括Linux和Windows系统。 在Linux上安装Apache FTP服务器 首先,确保Java已经安装。可以在命令行中运行 java…

    Java 2023年6月2日
    00
  • 解析Java的Hibernate框架中的持久化类和映射文件

    解析Java的Hibernate框架中的持久化类和映射文件 Hibernate是一个Java平台的ORM框架,可以方便地进行对象和关系的映射,从而实现持久化操作。持久化类和映射文件是Hibernate框架中实现持久化操作的核心要素。本文将详细讲解解析Java的Hibernate框架中的持久化类和映射文件的完整攻略。 持久化类 持久化类是Hibernate框架…

    Java 2023年5月31日
    00
  • 使用spring框架实现数据库事务处理方式

    使用Spring框架可以很方便地实现数据库事务处理方式,下面是完整攻略。 1. Spring事务管理的基本概念 在Spring框架中,事务管理是通过Transaction Manager来实现的。它是一个抽象的接口,具体的实现可以是JDBC、Hibernate或JPA等。Spring框架在进行事务管理时,主要使用以下几个概念: PlatformTransac…

    Java 2023年5月20日
    00
  • RMI使用学习 小结

    RMI使用学习 小结 1. RMI简介 RMI(远程方法调用)是Java编程语言中用于实现远程过程调用的应用程序编程接口。RMI使一个Java虚拟机上的对象能够调用在另一个Java虚拟机上的对象的方法。RMI实现了对象级别的远程过程调用,用户不必关心底层的网络通讯细节。 RMI使用Java远程调用(Java Remote Method Invocation)…

    Java 2023年6月15日
    00
  • 你可能从未使用过的11+个JavaScript特性(小结)

    下面是详细讲解“你可能从未使用过的11+个JavaScript特性(小结)”的攻略。 介绍 本文将讲解11+个在JavaScript中常被忽略的特性。包括可选链操作符、空合并运算符、BigInt、Promise.allSettled()、Array.flat()、Array.flatMap()、Object.fromEntries()、String.trim…

    Java 2023年5月26日
    00
  • Java入门6(String和封装类)

    使用第三方jar包,完成get/set操作 Lombok,结合特殊的注解,实现setter和getter的自动生成 导入jar包 使用插件Lombok 在类里import 即可使用 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; //…

    Java 2023年4月19日
    00
  • Java swing实现支持录音等功能的钢琴程序

    如何实现Java Swing支持录音等功能的钢琴程序? 导入所需库文件 实现这个功能的Java库有很多,我们可以使用Java Sound API、Java Media Framework、JLGui和JLayer。为了方便起见,我们在这里使用Java Sound API来实现这个功能。我们需要导入下面的库文件: <dependency> <…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部