快速排序的原理及java代码实现

下面我来详细讲解一下“快速排序的原理及Java代码实现”的完整攻略。

1. 快速排序的原理

快速排序是一种常见的排序算法,其基本思想是:选择一个基准元素,将待排序序列分成两个子序列,使得左边的子序列元素都小于等于基准元素,右边的子序列元素都大于等于基准元素,然后递归地对子序列进行排序,直到整个序列有序。

具体的实现过程如下:

  1. 从待排序序列中选择一个基准元素,通常选择第一个或最后一个元素。
  2. 设置两个指针low和high,分别指向序列的左端和右端。
  3. 从high开始向左扫描,直到找到一个小于等于基准元素的元素,将其与基准元素交换;然后从low开始向右扫描,直到找到一个大于等于基准元素的元素,将其与基准元素交换。
  4. 重复步骤3,直到low>=high,然后将基准元素放入其最终位置。
  5. 对基准元素左右两个子序列分别递归地进行快速排序。

2. Java代码实现

下面是使用Java实现快速排序的示例代码:

public class QuickSort {
    public void quickSort(int[] arr, int left, int right) {
        if (left < right) {
            // 选取基准元素,将序列分割,并返回基准元素的位置
            int pivot = partition(arr, left, right);
            // 递归地对基准元素左边的子序列进行排序
            quickSort(arr, left, pivot - 1);
            // 递归地对基准元素右边的子序列进行排序
            quickSort(arr, pivot + 1, right);
        }
    }

    private int partition(int[] arr, int left, int right) {
        // 选取最左边的元素为基准元素
        int pivot = arr[left];
        int low = left + 1;
        int high = right;
        while (low <= high) {
            // 从高位开始向左扫描,寻找比基准元素小的元素
            while (low <= high && arr[high] >= pivot) {
                high--;
            }
            // 从低位开始向右扫描,寻找比基准元素大的元素
            while (low <= high && arr[low] < pivot) {
                low++;
            }
            // 找到这两个元素后,交换它们的位置
            if (low < high) {
                swap(arr, low, high);
            }
        }
        // 将基准元素放入其最终位置
        swap(arr, left, high);
        return high;
    }

    private void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

示例1:对数组{6, 1, 3, 9, 8, 7}进行排序

int[] arr = {6, 1, 3, 9, 8, 7};
QuickSort q = new QuickSort();
q.quickSort(arr, 0, arr.length - 1);
// 输出排序结果
System.out.println(Arrays.toString(arr));

运行结果如下:

[1, 3, 6, 7, 8, 9]

示例2:对随机生成的一百万个整数进行排序,计算排序时间

int n = 1000000;
Random random = new Random();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
    arr[i] = random.nextInt();
}
QuickSort q = new QuickSort();
long startTime = System.currentTimeMillis();
q.quickSort(arr, 0, arr.length - 1);
long endTime = System.currentTimeMillis();
System.out.println("排序完成,用时:" + (endTime - startTime) + "毫秒");

运行结果如下:

排序完成,用时:66毫秒

3. 总结

快速排序是一种高效的排序算法,其时间复杂度为O(nlogn),因此被广泛应用于各种排序场景中。在实际应用中,需要注意基准元素的选择,以及递归过程中栈空间的使用。

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

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

相关文章

  • Struts2获取参数的三种方法总结

    下面我将详细讲解“Struts2获取参数的三种方法总结”的攻略: Struts2获取参数的三种方法总结 1. 在Action类中定义参数 在Action类中通过定义成员变量的方式获取请求参数。需要注意的是,需要提供setter方法来进行参数注入。 示例代码: public class MyAction extends ActionSupport { priv…

    Java 2023年6月15日
    00
  • 宾馆客房管理系统(Java+SQL Server)

    源代码下载链接: 一、宾馆客房管理系统开发初衷   随着互联网技术的迅速发展,计算机技术的普及以及信息化时代的推波助澜,宾馆客房需求的逐渐增大,这也是挑战了宾馆客房管理方面的技术,以前的人工管理方式已经不再适应现在的环境,取而代之的是先进的宾馆客房管理系统,提高了宾馆的工作效率,为想要入住宾馆的人提供更好的服务。宾馆客房管理工作面对大量顾客的私人信息,引入信…

    Java 2023年4月18日
    00
  • JAVA字符串格式化-String.format()的使用

    下面为您详细讲解”JAVA字符串格式化-String.format()的使用”的完整攻略。 什么是字符串格式化? 在开发过程中,有时候我们需要将不同的数据格式化为字符串,以便我们更好地输出到控制台或文件中。例如,我们需要将日期、时间、数字等各种类型的数据格式化为字符串,然后再进行输出,这时候要用到字符串格式化功能。 Java中的字符串格式化 Java中的字符…

    Java 2023年5月26日
    00
  • Java数组实现动态初始化的实例详解

    Java数组实现动态初始化的实例详解 在Java中,我们可以通过数组来存储具有相同类型的多个变量。通过动态初始化,我们可以在声明数组时直接为数组元素分配空间并进行初始化。 数组动态初始化的语法 Java中动态初始化数组可以按如下的方式进行: DataType[] arrayName = new DataType[arrayLength]; 其中,DataTy…

    Java 2023年5月26日
    00
  • springboot引用kettle实现对接oracle数据的示例代码

    下面是详细讲解“springboot引用kettle实现对接oracle数据的示例代码”的完整攻略,包含两条示例: 1. 安装Kettle 首先需要在本机安装好Kettle。可以到Kettle官网下载Kettle Community Edition 8.3.0,解压缩后即可使用。 2. 初始化SpringBoot项目 在IDEA中创建一个新的SpringBo…

    Java 2023年5月20日
    00
  • Java连接MySQL数据库增删改查的通用方法(推荐)

    我们知道,在Java应用中经常需要使用到MySQL数据库。而在使用MySQL数据库时,常见的操作就是增删改查。本文就来详细讲解如何通过Java程序连接MySQL数据库并实现增删改查操作。 1. 准备工作 在开始使用Java连接MySQL数据库之前,需要进行一些准备工作: 下载并安装MySQL数据库,创建数据库及数据表; 下载并配置MySQL数据库的JDBC驱…

    Java 2023年5月19日
    00
  • 简易的投票系统以及js刷票思路和方法

    简易的投票系统 本文将介绍如何搭建一个简易的投票系统,并且针对该投票系统介绍js刷票思路和方法。 投票系统原理 投票系统的原理非常简单,只需要记录每个用户对每个选手的投票数即可。在展示投票结果时,对每个选手的投票数进行累加,从而得出该选手的总得票数,从高到低排序就可以得出投票结果。 实现步骤 定义数据库表 创建一个votes表,表结构如下: 字段名 类型 说…

    Java 2023年6月15日
    00
  • JDBC实现学生管理系统

    下面是 JDBC 实现学生管理系统的完整攻略。 简介 JDBC(Java Database Connectivity) 是 Java 常用的操作关系型数据库的一种机制,它提供了一种标准的 API,用于操作不同数据库系统之间的异同。 学生管理系统是一种简单的信息管理系统,通常基于数据库系统来实现。在这个示例中,我们将展示如何使用 JDBC 来连接数据库并进行基…

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