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中表示一个文件的File类型详解

    当我们在Java中需要处理文件或目录时,通常需要使用File类。File类代表磁盘中的文件或目录的路径名。 File类的创建 可以通过以下两种方法来创建File类: 1.使用路径名字符串或File类对象作为参数创建File对象 File file1 = new File("C:/Users/Desktop/Example.txt"); /…

    Java 2023年5月20日
    00
  • java简单实现计算器

    下面是“Java简单实现计算器”的完整攻略: 1. 实现思路 Java简单实现计算器的核心是要实现对用户输入的表达式的计算,这可以通过将输入的表达式转化成中缀表达式,然后再将中缀表达式转换成后缀表达式来实现。转换成后缀表达式后,计算过程可以通过栈的数据结构来实现。 具体步骤如下: 接收用户输入的表达式。 将表达式转换成中缀表达式。 将中缀表达式转换成后缀表达…

    Java 2023年5月18日
    00
  • Java接口的作用_动力节点Java学院整理

    Java接口的作用_动力节点Java学院整理 一、什么是Java接口 Java接口是抽象类的一种特殊形式,它只包含抽象方法、常量和默认方法。接口中所有的成员都是public访问修饰符(当然也可以省略不写public),即所有的成员方法和数据字段都必须是公开的。 二、Java接口的作用 Java接口作为Java中的一种设计思想,在实际开发中具有如下几个作用: …

    Java 2023年5月30日
    00
  • java获取优酷视频地址示例

    获取优酷视频地址的过程,可以通过分析网页代码,找到视频的真实地址。以下是获取优酷视频地址的示例。 方法一:使用第三方库 可以使用第三方库,比如说YouGet,它可以直接获取到优酷视频的真实地址。具体操作如下: 安装YouGet pip install you-get 获取视频地址 you-get https://v.youku.com/v_show/id_X…

    Java 2023年5月26日
    00
  • Java 如何实现一个http服务器

    下面是 Java 如何实现一个 http 服务器的完整攻略: 1. 了解 HTTP 协议 HTTP(Hypertext Transfer Protocol,超文本传输协议)是一个应用层协议,用于在 Web 上传输超文本。在实现自己的 http 服务器之前,需要先对 HTTP 协议有一个基本的了解。 2. 实现一个 HTTP 请求处理器 在 Java 中,可以…

    Java 2023年5月18日
    00
  • 基于spring boot 2和shiro实现身份验证案例

    实现基于Spring Boot 2和Shiro的身份验证,可以按以下步骤进行: 步骤一:创建Spring Boot项目 使用Spring Initializr或者其他方式创建一个Spring Boot项目。 步骤二:添加Shiro依赖 在项目的pom.xml中添加Shiro的依赖: <dependency> <groupId>org.…

    Java 2023年6月15日
    00
  • idea中JRebel不生效问题及解决方案

    IDEA中JRebel不生效问题及解决方案 问题描述 在开发Java Web应用时,我们通常会使用JRebel来支持热部署,以提升开发效率。但是,有时我们会遇到在IDEA中配置了JRebel,但是JRebel却无法生效的情况。本文将分享几种可能的原因以及针对性的解决方案。 解决方案 方案一:检查配置中的激活状态 首先,需要检查IDEA中JRebel插件的激活…

    Java 2023年5月26日
    00
  • Java 如何利用缓冲流读写文件

    Java 可以通过缓冲流来读写文件,缓冲流会将 I/O 操作的数据缓存起来,通过缓存操作可以减少访问磁盘次数,进而提升程序的性能。下面是利用缓冲流读写文件的步骤: 创建输入流对象。首先需要创建一个文件输入流对象(FileInputStream),再把它作为参数传给缓冲输入流(BufferedInputStream)的构造方法,从而创建一个缓冲输入流对象(例如…

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