Java实现几种常见排序算法代码

Java实现几种常见排序算法代码

在本文中,我们将介绍 6 种常见的排序算法的 Java 代码实现,这些排序算法分别是:

  1. 冒泡排序
  2. 选择排序
  3. 插入排序
  4. 快速排序
  5. 归并排序
  6. 堆排序

为了方便说明,我们将在每个排序算法的代码实现中使用一个简单的示例数组 arr,用于展示排序前与排序后的结果。示例代码如下:

int[] arr = {5, 2, 8, 3, 9, 1};

冒泡排序

冒泡排序的原理是比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的位置,直到没有任何一对数字需要比较。

以下是 Java 代码实现:

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

经过冒泡排序后,arr 数组的结果如下:

{1, 2, 3, 5, 8, 9}

选择排序

选择排序的原理是每次从未排序的元素中选择最小的元素,将其放到已排序数列的末尾。

以下是 Java 代码实现:

for (int i = 0; i < arr.length - 1; i++){
    int minIndex = i;
    for (int j = i + 1; j < arr.length; j++){
        if (arr[j] < arr[minIndex]){
            minIndex = j;
        }
    }
    int temp = arr[minIndex];
    arr[minIndex] = arr[i];
    arr[i] = temp;
}

经过选择排序后,arr 数组的结果如下:

{1, 2, 3, 5, 8, 9}

插入排序

插入排序的原理是将未排序的元素插入到已排序部分的正确位置中。

以下是 Java 代码实现:

for (int i = 1; i < arr.length; i++) {
    int key = arr[i];
    int j = i - 1;
    while (j >= 0 && arr[j] > key) {
        arr[j + 1] = arr[j];
        j = j - 1;
    }
    arr[j + 1] = key;
}

经过插入排序后,arr 数组的结果如下:

{1, 2, 3, 5, 8, 9}

快速排序

快速排序的原理是选择一个基准数,将小于基准数的元素放在它前面,大于基准数的元素放在它后面,不断重复这个过程直到整个数组排序完成。

以下是 Java 代码实现:

public static void quickSort(int[] arr, int start, int end) {
    if (start < end) {
        int partitionIndex = partition(arr, start, end);
        quickSort(arr, start, partitionIndex - 1);
        quickSort(arr, partitionIndex + 1, end);
    }
}

public static int partition(int[] arr, int start, int end) {
    int pivot = arr[end];
    int i = start - 1;
    for (int j = start; j < end; j++) {
        if (arr[j] <= pivot) {
            i++;
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    int temp = arr[i + 1];
    arr[i + 1] = arr[end];
    arr[end] = temp;
    return i + 1;
}

经过快速排序后,arr 数组的结果如下:

{1, 2, 3, 5, 8, 9}

归并排序

归并排序的原理是将数组一分为二,然后对两部分分别排序,最后将两个已排序的部分合并为一个已排序的部分。

以下是 Java 代码实现:

public static void mergeSort(int[] arr, int low, int high) {
    if (low < high) {
        int mid = (low + high) / 2;
        mergeSort(arr, low, mid);
        mergeSort(arr, mid + 1, high);
        merge(arr, low, mid, high);
    }
}

public static void merge(int[] arr, int low, int mid, int high) {
    int[] temp = new int[high - low + 1];
    int i = low, j = mid + 1, k = 0;
    while (i <= mid && j <= high) {
        if (arr[i] <= arr[j]) {
            temp[k++] = arr[i++];
        } else {
            temp[k++] = arr[j++];
        }
    }
    while (i <= mid) {
        temp[k++] = arr[i++];
    }
    while (j <= high) {
        temp[k++] = arr[j++];
    }
    for (int x = 0; x < temp.length; x++) {
        arr[low + x] = temp[x];
    }
}

经过归并排序后,arr 数组的结果如下:

{1, 2, 3, 5, 8, 9}

堆排序

堆排序的原理是将数组构建为一个堆,然后取出堆顶元素(即最大元素),将剩余元素再构建为一个堆,再取出堆顶元素,重复这个过程直到整个数组排序完成。

以下是 Java 代码实现:

public static void heapSort(int[] arr) {
    int len = arr.length;
    for (int i = len / 2 - 1; i >= 0; i--) {
        heapify(arr, len, i);
    }
    for (int i = len - 1; i >= 0; i--) {
        int temp = arr[0];
        arr[0] = arr[i];
        arr[i] = temp;
        heapify(arr, i, 0);
    }
}

public static void heapify(int[] arr, int len, int i) {
    int largest = i;
    int l = 2 * i + 1;
    int r = 2 * i + 2;
    if (l < len && arr[l] > arr[largest]) {
        largest = l;
    }
    if (r < len && arr[r] > arr[largest]) {
        largest = r;
    }
    if (largest != i) {
        int temp = arr[i];
        arr[i] = arr[largest];
        arr[largest] = temp;
        heapify(arr, len, largest);
    }
}

经过堆排序后,arr 数组的结果如下:

{1, 2, 3, 5, 8, 9}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现几种常见排序算法代码 - Python技术站

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

相关文章

  • java Hibernate save()与persist()区别

    Java中的Hibernate框架是一种ORM(Object-Relational Mapping)框架,它在数据库和Java对象之间建立了一种映射关系。在Hibernate中,我们可以使用save()和persist()方法来将Java对象持久化到数据库中。然而,这两个方法之间存在一些细微的区别,下面我们来详细讲解一下。 Hibernate save()方…

    Java 2023年5月20日
    00
  • Java Cmd运行Jar出现乱码的解决方案

    请看以下完整攻略: Java Cmd运行Jar出现乱码的解决方案 很多Java程序员在用cmd运行jar包时,都会遇到乱码的问题。这主要是因为cmd默认编码是GBK而不是UTF-8,而jar包中的资源文件往往是UTF-8编码的。本文就为大家介绍几种解决方案。 方案一:修改Cmd编码为UTF-8 这种方式比较简单,只需要在cmd输入以下命令: chcp 650…

    Java 2023年5月20日
    00
  • java实现随机数生成器

    生成随机数是我们在Java程序中经常遇到的问题,Java提供了一些内置的方法来生成伪随机数,我们也可以使用外部库来实现更高级别的随机化过程。本文将为大家介绍Java实现随机数生成器的完整攻略。 生成伪随机数 Java为我们提供了一些内置的类,比如Random和Math,来生成伪随机数。 使用Random类 Random类是Java中最基本的生成随机数的类之一…

    Java 2023年5月23日
    00
  • java实现鲜花销售系统

    Java实现鲜花销售系统攻略 确定需求 在开始实现鲜花销售系统之前,需要先明确系统需要实现哪些功能和特点,例如: 用户登陆/注册功能 鲜花分类、展示、搜索功能 订单提交、支付、物流追踪功能 管理员对鲜花、订单、用户管理功能 设计数据库 确定需要实现的功能后,我们需要设计一个合适的数据库。数据库的结构需要包含以下表: user (用户信息表) flower (…

    Java 2023年5月30日
    00
  • Java输入输出流复制文件所用时间对比

    确定实验目标和环境 首先,我们要确定本次实验的目标,即比较不同输入输出流方式复制文件所用的时间。具体来说,我们要使用普通的字节流、带缓冲区的字节流、字符流和NIO四种方式,分别复制文件,并测量所用的时间,以比较不同方式的效率。 其次,我们需要准备实验的环境,包括需要复制的文件和用于测试时间的代码。 示例1:准备复制的文件 我们可以在测试时使用大小为100MB…

    Java 2023年5月20日
    00
  • 一文详解Spring Security的基本用法

    一文详解Spring Security的基本用法 前言 Spring Security是一个基于Spring框架的安全认证和权限控制框架,为我们的Web应用提供了完善的身份认证和授权管理功能。本文将介绍Spring Security的基本用法,帮助读者了解其概念和使用方法。 Spring Security的基本概念 身份认证 身份认证即验证一个用户是否是系统…

    Java 2023年6月3日
    00
  • 详解SpringBoot定时任务说明

    下面我来详细讲解一下“详解SpringBoot定时任务说明”的完整攻略。 什么是SpringBoot定时任务? SpringBoot定时任务是指在特定的时间或周期性的执行一些任务,比如定时生成报表、清理数据库等。SpringBoot框架中提供了丰富的定时任务支持,可以通过简单的配置来实现这些任务。 定时任务的实现方式 基于注解和功能接口实现定时任务 Spri…

    Java 2023年5月19日
    00
  • 如何配置类路径?

    以下是关于如何配置类路径的完整使用攻略: 什么是类路径? Java程序在运行时需要加载类文件,而类文件的位置就是通过类路径来指定的。类路径可以包含多个路径,每个路径之间使用分隔符(如冒号或分号)分隔。类路径可以包含目录和JAR文件。 如何配置类路径? 下面介绍三种常见的配置类路径的方法。 方法一:使用命令行参数设置类路径 可以通过命令行参数设置类路径。例如,…

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