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

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实现远程控制技术完整源代码分享

    Java实现远程控制技术完整源代码分享 概述 远程控制技术是指可以通过网络远程控制另一台电脑。而 Java 实现远程控制则是一种基于 Java 技术实现远程控制的方法,可以使得用户在任意位置使用电脑远程控制被控制的电脑,非常实用。 在此,本文将会为大家讲解 Java 实现远程控制技术的完整攻略,并且分享完整的源代码。 技术准备 在开始编写完整的源代码之前,需…

    Java 2023年5月19日
    00
  • 详解使用Jenkins自动编译部署web应用

    详解使用Jenkins自动编译部署web应用 简介 Jenkins是一个开源的、支持持续集成和持续交付的软件开发工具。使用Jenkins可以编译、打包、测试和部署你的web应用程序。本文将详细讲解如何使用Jenkins自动编译部署web应用。 环境配置 在开始使用Jenkins自动编译部署web应用之前,需要进行一些环境配置。以下是环境配置的步骤: 安装Je…

    Java 2023年5月26日
    00
  • Java中List for循环的6种写法总结(推荐)

    这里是Java中List for循环的6种写法总结的完整攻略。 简介 在Java中,我们经常需要对List集合进行遍历。虽然for循环是一种基本的方法,但是我们有多种写法可以使用。这里总结了6种常用的List for循环写法,并且推荐使用其中之一。 1. 基本的for循环 List<String> list = new ArrayList<…

    Java 2023年5月26日
    00
  • java实现动态验证码

    这里是Java实现动态验证码的完整攻略。 什么是动态验证码 动态验证码是一种更加安全的验证码,在传统的验证码基础上增加了动态变化的效果,使得更难被机器人识别。 实现步骤 生成验证码 我们可以使用Java的第三方库生成验证码图片,代码如下所示: import cn.hutool.captcha.CaptchaUtil; import cn.hutool.cap…

    Java 2023年6月15日
    00
  • windows系统配置Java开发环境变量

    下面我将详细讲解在Windows系统上配置Java开发环境变量的完整攻略,包括以下内容: 下载Java JDK 安装Java JDK 配置Java环境变量 验证Java环境变量是否配置成功 下载Java JDK 首先,我们需要从Oracle官网(https://www.oracle.com/java/technologies/javase-downloads…

    Java 2023年5月24日
    00
  • 33基于Java简单实现图书馆借书管理系统设计与实现

    本章节给大家介绍一个基于Java简单实现图书馆借书管理系统的设计与实现 项目概述 项目总体分为俩种角色,分别是管理员和阅读者,管理员可以登录系统中,进行图书管理,上架下架图书,对用户进行管理、对读者进行管理、查看借阅记录管理等,读者角色可以登录系统查询图书信息、借阅和归还图书、查看个人借阅记录、编辑个人信息等。 项目功能简单,数据库也只有4张表,分别为管理员…

    Java 2023年5月8日
    00
  • 详细图解Java中字符串的初始化

    为了详细讲解“详细图解Java中字符串的初始化”的完整攻略,我会按照以下步骤进行: 1. 什么是字符串? 在Java中,字符串是一个对象,用来表示一组字符序列(包括字母、数字、符号等)。Java字符串使用Unicode字符编码,并且是不可变的对象,也就是说,它的值无法被更改。 2. 字符串的初始化方式 Java中有多种方式可以初始化字符串。下面介绍最常用的四…

    Java 2023年5月26日
    00
  • JDBC 入门(三)

    JDBC 入门(三)主要讲解了如何执行数据库的查询操作以及如何获取查询结果。以下是具体的完整攻略。 JDBC 查询操作 我们在学习 JDBC 操作数据库时,通常都是要进行数据的查询、更新、插入和删除操作。这里我们将讲解如何进行查询操作。 查询示例 下面是一段查询 MySQL 数据库中的 user 表,并将结果打印出来的示例代码。 import java.sq…

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