java 中冒泡、二分、快速算法详解

yizhihongxing

Java 中冒泡、二分、快速算法详解

冒泡排序

冒泡排序是一种简单的排序算法,通过不断交换相邻元素的值,把最大或最小的元素逐步“浮”到数列的顶端或底端。具体流程如下:

  1. 比较相邻的两个元素,如果前一个元素大于后一个元素,则交换这两个元素的位置。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾最后一对。这样一轮排序过后,排在数列末尾的元素就是最大或最小的元素。
  3. 再针对除去已排序的元素外的数列中的所有元素进行同样的操作,直到整个数列有序。

冒泡排序的代码实现如下:

public static void bubbleSort(int[] arr) {
    int len = arr.length;
    for (int i = 0; i < len - 1; i++) {
        for (int j = 0; j < len - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

示例:

int[] arr = {3, 9, 4, 5, 2, 1, 6};
bubbleSort(arr);
System.out.println(Arrays.toString(arr));
// 输出结果为:"[1, 2, 3, 4, 5, 6, 9]"

二分查找

二分查找也叫折半查找,是一种高效的查找算法,适用于有序数列。它查找过程从数列的中间元素开始,如果该元素等于查找值,则查找成功,否则根据中间元素和查找值的大小关系,决定去上半段还是下半段继续查找,直到查找值被找到或数列被查找完仍未找到。具体流程如下:

  1. 找到数列的中间值。
  2. 如果中间值等于查找值,则查找成功,返回索引值。
  3. 如果中间值大于查找值,则在中间值的左半部分继续查找。
  4. 如果中间值小于查找值,则在中间值的右半部分继续查找。
  5. 如果未找到,则返回-1。

二分查找的代码实现如下:

public static int binarySearch(int[] arr, int target) {
    int left = 0;
    int right = arr.length - 1;
    while (left <= right) {
        int mid = (left + right) / 2;
        if (arr[mid] == target) {
            return mid;
        } else if (arr[mid] > target) {
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    return -1;
}

示例:

int[] arr = {1, 2, 3, 4, 5, 6, 9};
int target = 5;
System.out.println(binarySearch(arr, target));
// 输出结果为:"4"

快速排序

快速排序是一种比较常用的排序算法,通过递归将数列不断分解为更小的子数列,然后再将它们合并成一个有序的数列。具体流程如下:

  1. 选择一个基准元素(一般选择数列的第一个元素),把数列分成两部分。
  2. 将比基准元素小的元素放在左边的子序列中,大于基准元素的元素放在右边的子序列中,越过基准元素。
  3. 对左右两个子序列分别进行快速排序,直到各个子序列中只有一个元素或空序列。
  4. 合并所有子序列,得到最终有序序列。

快速排序的代码实现如下:

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

示例:

int[] arr = {3, 9, 4, 5, 2, 1, 6};
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
// 输出结果为:"[1, 2, 3, 4, 5, 6, 9]"

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 中冒泡、二分、快速算法详解 - Python技术站

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

相关文章

  • Java SpringBoot核心源码详解

    Java SpringBoot核心源码详解攻略 什么是SpringBoot SpringBoot是基于Spring Framework的快速构建容易维护的Web项目的框架。它的设计理念是提供开箱即用的功能,减少开发者的配置工作。 SpringBoot的核心源码 SpringBoot的启动流程 SpringBoot的启动过程基于Spring Framework…

    Java 2023年5月19日
    00
  • Java 三种进制的数值常量操作

    Java 三种进制的数值常量操作 在Java中,数值型常量支持三种进制表示方式:十进制、八进制和十六进制。这些常量可以用于表示不同的数字大小和格式,本文将对它们进行详细的讲解。 十进制整数 十进制整数(Decimal Integer)是以10为基数的整数,常用于日常生活中的计数,例如1、2、3、10、100等等。 十进制整数的表示方法非常简单,只要直接写下数…

    Java 2023年5月26日
    00
  • Spring和SpringBoot之间的区别

    让我们开始讲解“Spring和SpringBoot之间的区别”的完整攻略。 1. Spring 和 Spring Boot 的概念 Spring 是一个开源的 JavaEE(现在叫 Jakarta EE)应用程序框架,它提供了一个容器的概念,即框架内部的 Ioc(控制反转)容器,还提供了很多实用的模块,如 AOP、JPA、JDBC 等,可以帮助开发人员快速构…

    Java 2023年5月15日
    00
  • Java动态编译执行代码示例

    我将详细讲解“Java动态编译执行代码示例”的完整攻略,过程中将包含两条示例说明。 什么是Java动态编译执行代码? Java动态编译执行代码是一种在程序运行时动态编译源代码的方式,并将其转换为可以直接执行的代码。这种方式可以帮助开发者实现灵活的功能,使得程序更容易适应不同的运行环境。 实现Java动态编译执行代码的流程 实现Java动态编译执行代码通常分为…

    Java 2023年5月26日
    00
  • response.setContentType()的作用及MIME参数详解

    下面是“response.setContentType()的作用及MIME参数详解”的完整攻略。 1. response.setContentType()的作用 在Java Web开发中,我们经常需要向客户端发送响应报文,使用response.setContentType()可以告诉浏览器我们发送的数据类型、编码方式等信息。 其中,response是Web应…

    Java 2023年6月15日
    00
  • springboot使用JdbcTemplate完成对数据库的增删改查功能

    下面是详细的攻略: 1. 引入依赖 首先在pom.xml文件中添加JdbcTemplate的依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifact…

    Java 2023年5月20日
    00
  • Java比较两个List的值是否相等的方法

    要比较两个Java中的List是否相等,可以采用以下几种方法: 1.利用equals()方法进行比较 使用Java List提供的equals()方法进行比较是最简单的比较方式。这种方法只需要比较两个List中每个项目的值是否都相同,并且每个List中的项目顺序也要相同。示例代码如下: //定义两个List List<String> list1 …

    Java 2023年5月26日
    00
  • JAVA实现301永久重定向方法

    Java实现301永久重定向的方法需要在服务器端进行配置。下面是具体的步骤: 1. 配置web.xml文件 在web.xml文件中添加以下代码,该代码将对匹配的URL进行永久重定向 <web-app> <error-page> <error-code>301</error-code> <location&…

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