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

yizhihongxing

下面我们来详细讲解“快速排序算法在Java中的实现”的完整攻略。

快速排序算法简介

快速排序(Quicksort)算法是基于分治思想的一种高效的排序算法,由Tony Hoare于1959年发明。其思路是选择一个枢纽元素(pivot),然后将待排序数据分为左右两个子序列,左子序列所有元素均小于枢纽元素,右子序列所有元素均大于等于枢纽元素。接着递归地对左右两个子序列进行快速排序,最后将排好序的左子序列、枢纽元素和排好序的右子序列合并起来即可。

快速排序算法的时间复杂度为O(nlogn),在大多数情况下表现良好。

Java中快速排序算法的实现

下面我们就来介绍Java中快速排序算法的实现。

算法实现

在Java中,我们可以使用递归实现快速排序算法。具体实现过程如下:

public static void quickSort(int[] arr, int left, int right) {
    if (left >= right) {
        return;
    }
    int pivot = arr[(left + right) / 2];
    int i = left, j = right;
    while (i <= j) {
        while (arr[i] < pivot) {
            i++;
        }
        while (arr[j] > pivot) {
            j--;
        }
        if (i <= j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            i++;
            j--;
        }
    }
    quickSort(arr, left, j);
    quickSort(arr, i, right);
}

以上代码中,我们使用额外的两个指针i和j来进行数组划分,pivot用于选择枢纽元素。代码中,我们首先选取中间位置的元素作为枢纽元素。接着在while循环中,我们让i指针指向第一个大于等于pivot的元素;j指针指向第一个小于等于pivot的元素。此时,如果i<=j,我们交换arr[i]和arr[j]的值,接着让i++,j--,继续向中间靠拢。当i>j时,我们递归地对左右两个子序列进行快速排序即可。

示例说明

我们用一个简单的示例来说明快速排序算法的实现过程。

假设有待排序数组arr={5, 2, 1, 3, 4},按照实现过程,我们先选取中间位置的元素作为枢纽元素,即pivot=arr[2]=1。然后,左指针i从左端开始向右移动,i=0时,arr[i]=5大于1,停止移动;右指针j从右端开始向左移动,j=4时,arr[j]=4小于1,停止移动。因为此时满足i<=j,所以交换arr[i]和arr[j]的值,即arr[i]=4,arr[j]=5,此时arr={4, 2, 1, 3, 5},接着i++,j--,继续向中间靠拢。

接下来,i从1开始向右移动,i=1时,arr[i]=2小于1,停止移动;j从3开始向左移动,j=3时,arr[j]=3大于1,停止移动。因为此时满足i<=j,所以交换arr[i]和arr[j]的值,即arr[i]=3, arr[j]=2,此时arr={4, 3, 1, 2, 5},接着i++,j--,继续向中间靠拢。

此时,i>j,递归地对左半部分数组{4, 3, 1}和右半部分数组{2, 5}进行快速排序,并将结果合并即可。

另外一个示例详见以下代码块中。

public static void main(String[] args) {
    int[] arr = {10, 80, 30, 90, 40, 50, 70};

    System.out.println("原数组:");
    for (int i : arr) {
        System.out.print(i + " ");
    }

    quickSort(arr, 0, arr.length - 1);

    System.out.println("\n排序后的数组:");
    for (int i : arr) {
        System.out.print(i + " ");
    }
}

输出结果如下:

原数组:
10 80 30 90 40 50 70 
排序后的数组:
10 30 40 50 70 80 90

总结

以上就是关于快速排序算法在Java中的实现的完整攻略,我们希望对你有所帮助。如果您还有其他问题或疑问,可以在留言区留言,我们会尽快回复。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:快速排序算法在Java中的实现 - Python技术站

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

相关文章

  • IntelliJ IDEA中ajax开发实现分页查询示例

    IntelliJ IDEA是一款优秀的Java集成开发环境,它内置了强大的插件和工具,为开发者提供了丰富的开发体验。在IntelliJ IDEA中使用Ajax实现分页查询的过程,需要按照以下步骤进行: 1. 添加相关依赖 在IntelliJ IDEA中,可以使用Maven或Gradle来管理项目依赖。因此,我们需要在pom.xml文件中添加相关依赖,如下所示…

    Java 2023年6月15日
    00
  • 关于SpringMVC对Restful风格的支持详解

    关于SpringMVC对Restful风格的支持详解 在Web开发中,RESTful风格的API设计已经成为了一种趋势。SpringMVC作为一个流行的Web框架,也提供了对RESTful风格的支持。本文将详细讲解SpringMVC对RESTful风格的支持,包括如何使用@RequestMapping注解、如何使用@PathVariable注解、如何使用@R…

    Java 2023年5月18日
    00
  • Java 常见的几种内存溢出异常的原因及解决

    Java 常见的几种内存溢出异常的原因及解决 简介 Java 是一门内存管理的语言,它自带了垃圾回收器能够自动地清理无用对象以释放内存空间。但是,在一些特定情况下(如长时间运行、大量对象创建等),Java 应用程序可能会出现内存溢出的异常,导致程序崩溃。这篇文章将会讲解 Java 中常见的几种内存溢出异常的原因及解决方法。 原因及解决方法 堆溢出 堆是 Ja…

    Java 2023年5月28日
    00
  • SpringBoot深入分析webmvc和webflux的区别

    下面是关于“SpringBoot深入分析webmvc和webflux的区别”的完整攻略,包含两个示例说明。 SpringBoot深入分析webmvc和webflux的区别 SpringBoot是一个流行的Java开发框架,它提供了许多功能和特性来简化Java应用程序的开发。其中,SpringBoot的Web框架有两种选择:webmvc和webflux。本文将…

    Java 2023年5月17日
    00
  • 解决lambda表达式内出现异常无法throw抛出的问题

    当使用Lambda表达式时,可能会遇到无法抛出异常的问题。通常来说,在Lambda表达式中,我们不能throw出异常,因为这样做会导致代码无法编译。 但是,在一些特定的场合,我们还是需要在Lambda表达式中抛出异常。当这种情况发生时,我们可以通过使用java.util.function.Consumer或java.util.function.Supplie…

    Java 2023年5月27日
    00
  • SpringBoot log打印及输出方式

    SpringBoot是一种快速构建基于Spring框架的应用程序的框架。在应用程序的开发和维护过程中,日志是必不可少的工具。SpringBoot提供了许多日志框架,如Logback、Log4j2和Java Util Logging等。本篇攻略将详细讲解SpringBoot log打印及输出方式,如下: 日志输出级别 SpringBoot使用Logback作为…

    Java 2023年5月26日
    00
  • Struts1简介和入门_动力节点Java学院整理

    Struts1简介和入门攻略 什么是Struts1 Struts1是一个基于MVC设计模式的开源Web应用框架,可以快速构建基于Java EE的Web应用程序。它的主要组成部分包括Action、Form、Configuration、RequestProcessor等。 Struts1的优点 开源免费,社区支持活跃 遵循MVC设计模式,易于维护和扩展 可以快速…

    Java 2023年5月20日
    00
  • 通过js动态创建标签,并设置属性方法

    通过js动态创建标签并设置属性方法是一个常见的操作。下面是这个过程的详细攻略: 1. 创建元素 要动态创建标签,我们需要使用JavaScript中的createElement()方法。该方法用于创建新的HTML元素,并指定元素的标签名称。例如,创建一个 元素可以使用以下代码: const paragraph = document.createElement(…

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