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

相关文章

  • 你应该知道的21个Java核心技术

    你应该知道的21个Java核心技术攻略 Java作为一门广泛应用于企业级系统开发的编程语言,核心技术对于开发人员非常重要。在这里,我们总结了21个Java核心技术,并提供了相应的攻略,供您参考。 1. Java基础语法 Java基础语法是Java编程的基础,掌握了这些知识,可以轻松地进入Java编程的世界。在学习Java基础语法时,我们应该注重掌握Java数…

    Java 2023年5月23日
    00
  • Java实现数据库连接池简易教程

    Java实现数据库连接池简易教程 在Java web开发中,经常会使用到数据库连接池技术,它可以缓存一定数量的数据库连接,通过再次请求时,优先从连接池中获取已有的连接,而不是重新创建连接,从而提高程序的性能和响应速度。在这里,我们将详细讲解如何使用Java语言来实现一个简单的数据库连接池。 步骤 第一步:创建连接池 首先,我们需要创建连接池,代码如下: im…

    Java 2023年5月19日
    00
  • Java这个名字的来历与优势

    Java是一种流行的编程语言,自1995年以来就一直被广泛采用。它的名字“Java”是由它的创造者詹姆斯·高斯林(James Gosling)与他的团队考虑出来的。Java这个名字的来历与优势的攻略可以分为以下几个方面: Java这个名字的来历 Java最初被命名为Oak。然而,后来由于已有一种名为Oak的编程语言,所以詹姆斯·高斯林和他的团队转而寻找新的名…

    Java 2023年5月24日
    00
  • Java实现的Windows资源管理器实例

    Java实现的Windows资源管理器实例攻略 简介 Windows资源管理器是微软操作系统中的一个重要工具,它提供了对文件和文件夹的管理、查看和操作功能。本文将讲解如何使用Java编写一个Windows资源管理器的实例程序,让使用者可以通过程序来管理和操作自己的文件夹和文件。 实现步骤 步骤一:创建文件夹和文件类 首先,我们需要创建两个类:Folder和F…

    Java 2023年5月19日
    00
  • 新手了解java基础知识(二)

    下面给出“新手了解java基础知识(二)”的完整攻略。 知识点概述 本篇文章主要介绍Java中的基本数据类型、常量和变量。对于初学者来说,这是基础中的基础,掌握了这些内容才能更深刻地理解后续学习的内容。 本文主要介绍以下内容: Java中的基本数据类型 常量的定义与使用 变量的定义与使用 类型转换 Java中的基本数据类型 Java中共定义了8中基本数据类型…

    Java 2023年5月20日
    00
  • Spring Cache框架应用介绍

    针对Spring Cache框架应用介绍,我将分以下几个方面进行讲解,确保您能够全面了解并使用这一框架: Spring Cache框架介绍 Spring Cache框架是Spring官方提供的,用于缓存的框架。它可以将方法返回的结果缓存到内存、Redis、Ehcache等缓存服务器中,避免方法重复执行,保证系统性能和响应速度。同时,它还提供了对缓存的管理,如…

    Java 2023年5月19日
    00
  • java编写简单的ATM存取系统

    下面是Java编写简单的ATM存取系统的完整攻略。 1. 确定需求分析 在开始编写ATM系统之前,我们需要对系统的需求进行分析和确认。该系统的主要功能包括: 可以登录和注册账户 可以查询账户余额 可以取款和存款 可以修改账户密码 可以退出系统 2. 设计系统架构 确定了需求之后,我们需要设计ATM系统的整体架构。整个系统需要有以下几个模块: 用户登录和注册模…

    Java 2023年5月19日
    00
  • Java使用Jdbc连接Oracle执行简单查询操作示例

    Java使用JDBC连接Oracle数据库的步骤: 导入JDBC驱动程序 初始化数据库连接 创建Statement对象 执行SQL查询,并将结果集存储在ResultSet类对象中 处理结果集 关闭结果集、Statement和Connection对象 下面分别介绍这些步骤及对应示例: 1. 导入JDBC驱动程序 在Java代码中导入jdbc驱动程序,该驱动程序…

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