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

快速排序算法原理及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日

相关文章

  • java LinkedList类详解及实例代码

    Java LinkedList 类详解及实例代码 介绍 Java中的LinkedList类是一个双向链表的实现,是List接口的有序集合。LinkedList类提供了方便的操作链表的方法,可以很容易地实现添加、删除、插入以及访问节点等操作。 以下是创建一个LinkedList的示例: LinkedList<String> linkedList =…

    Java 2023年5月23日
    00
  • Centos 64位安装aapt、jdk、tomcat的详细教程

    请看下面的详细讲解。 CentOS 64位安装aapt、jdk、tomcat的详细教程 1. 安装aapt aapt是Android官方提供的一个命令行工具,安装aapt可以方便我们在CentOS系统上进行Android应用的开发、构建、签名等操作。以下是安装aapt的步骤: 安装Java环境 在CentOS上安装aapt之前,我们要先安装Java环境。在终…

    Java 2023年5月19日
    00
  • java链式创建json对象的实现

    Java中创建JSON对象的方式有很多,本文主要介绍链式创建JSON对象的方法实现。 1. 什么是链式创建JSON对象? 链式创建JSON对象是一种将多个属性值链接起来构建一个JSON对象的技术,可以使代码更简洁、更易读,但也要注意可读性。 2. 链式创建JSON对象实现的步骤 步骤1:导入依赖库 JSON库在Java中有很多选择,常用的有GSON、Fast…

    Java 2023年5月26日
    00
  • 基于ajax实现文件上传并显示进度条

    下面是基于ajax实现文件上传并显示进度条的完整攻略: 1. 准备工作 在前端实现基于ajax的文件上传需要以下几个工具/库: FormData对象:用于创建一个表单数据对象,方便把文件和其他数据打包发送到服务器端。 XMLHttpRequest对象:用于创建异步请求,可以通过它向服务器端发送数据。 FileReader对象:用于读取本地文件并把它转换成ba…

    Java 2023年5月20日
    00
  • Java时间类库Timer的使用方法与实例详解

    Java时间类库Timer的使用方法与实例详解 1. Timer类概述 Timer类是Java中非常常用的类之一,它是专门用于在后台线程按指定时间间隔执行任务的类。如:如果你想在每个三小时提醒一次,那么可以用Timer来执行提醒任务。Timer可以在线程中执行任务,并可以在指定的时间间隔内执行任务。 2. Timer类的使用方法 Timer类一共有两个版本:…

    Java 2023年5月20日
    00
  • 如何自己动手写SQL执行引擎

    如何自己动手写SQL执行引擎 要自己动手写一个SQL执行引擎,需要掌握以下几个步骤: 设计关系型数据库 构建SQL解析器 构建执行计划 执行查询语句 下面逐个步骤进行详细讲解: 设计关系型数据库 在设计关系型数据库时,需要考虑以下几个方面: 数据表设计:每个表需要设计对应的字段、数据类型、主键等信息。 索引设计:需要根据查询需求设计合适的索引,提高查询效率。…

    Java 2023年6月16日
    00
  • java算法之余弦相似度计算字符串相似率

    Java算法之余弦相似度计算字符串相似率 介绍 余弦相似度是一种常用的字符串相似率计算方法,可以用于文本相似度计算、推荐算法等场景。本文将介绍如何在Java中实现余弦相似度算法,可用于计算两个字符串之间的相似度。 算法原理 余弦相似度的计算原理是将两个文本的词向量表示为向量,然后计算这两个向量之间的夹角余弦值,夹角余弦值越大表示两个文本之间越相似,反之则越不…

    Java 2023年5月19日
    00
  • java后台利用Apache poi 生成excel文档提供前台下载示例

    下面是Java后台利用Apache POI生成Excel文档并提供前台下载的完整攻略: 1. 准备工作 在开始前,需要确保以下几点: 确保已经安装好了Java开发环境以及Apache POI库。 了解Java的文件输入输出操作。 2. 创建Excel文档 首先,我们需要使用Apache POI库创建一个空的Excel文档,并在其中创建一个工作表以及表头,代码…

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