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

yizhihongxing

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日

相关文章

  • jQuery实现AJAX定时刷新局部页面实例

    下面我来详细讲解如何使用jQuery实现AJAX定时刷新局部页面的完整攻略。 1. AJAX介绍 首先我们要了解的是什么是AJAX。AJAX全称为Asynchronous JavaScript and XML,即异步JavaScript和XML。简单来说,就是通过JavaScript在不刷新整个页面的情况下,与服务器通信并更新部分页面内容。 2. jQuer…

    Java 2023年6月15日
    00
  • Java的Struts框架报错“InvalidCancelException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“InvalidCancelException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置Cancel,则可能会出现此。在这种情况下,需要检查配置文件以解决此问题。 取消操作错误:如果取消操作不正确,则可能会出现此。在这种情况下,需要检查取消操作以解决此问题。 以下是两个实例: 1…

    Java 2023年5月5日
    00
  • Spring Boot如何使用Spring Security进行安全控制

    关于“Spring Boot如何使用Spring Security进行安全控制”的攻略,我们需要先明确以下几点: Spring Boot集成了Spring Security,只需要在pom.xml中引入Spring Security的依赖即可。 Spring Security可以配置多种安全验证方式,比如基于表单的验证、HTTP基本身份验证、OAuth2等。…

    Java 2023年5月20日
    00
  • 详解Java的构造方法及类的初始化

    详解Java的构造方法及类的初始化 Java中的类可以通过定义构造方法来初始化对象的成员变量。本文将介绍Java的构造方法及类的初始化。 构造方法的定义 构造方法是一种特殊的方法,用于在创建对象时初始化对象的成员变量。它具有以下特点: 方法名称和类名称相同 没有返回值类型 可以有多个形参 可以有多个构造方法 以下是一个示例: public class Per…

    Java 2023年5月26日
    00
  • Java对象的内存布局详细介绍

    Java对象的内存布局是指一个Java对象在内存中的存储方式,通常指的是其在堆内存中的存储方式。它分为三部分:对象头、实例变量和填充字节。接下来我将对Java对象内存布局进行详细的介绍。 对象头 对象头是Java对象的头部分,占据了对象的8到12个字节。对象头存储了对象的元数据信息,包含两部分:对象的Mark Word和对象的Class Pointer。在3…

    Java 2023年5月26日
    00
  • JSP 前端数据本地排序实例代码

    当我们需要对表格数据进行排序时,我们可以使用前端的JavaScript进行排序。下面是一个使用JSP和JavaScript实现前端数据本地排序的示例代码: 首先,我们可以创建一个包含表格的HTML代码,表格中的每行数据都由一个对象构成。对象中的每个属性对应每一列的数据,例如姓名、身高、年龄等。 <table id="myTable"…

    Java 2023年6月15日
    00
  • 几道和「黑洞照片」那种海量数据有关的算法问题

    这个话题涉及到海量数据处理和算法问题,我会尽可能详细地解释来帮助大家了解。 大数据处理的常用算法 排序算法 排序是大数据处理中最常用的算法之一。这是因为,在许多情况下,我们需要对从数据库中获取的大量数据进行排序,以便更好地分析和使用它们。以下是一些常用的排序算法: 冒泡排序:这是一种简单的排序算法,在较小的数据集中表现良好,但对于大规模数据集则效率较低。 快…

    Java 2023年5月19日
    00
  • 详解NGINX如何统计网站的PV、UV、独立IP

    要实现对网站PV、UV、独立IP的统计,可以通过在NGINX的配置文件中添加一些指令来实现。以下是一些常用的指令: 通过log_format指令自定义日志格式,包含访问IP、请求时间、请求方法、URL、HTTP协议等信息。 log_format mylog ‘$remote_addr – $remote_user [$time_local] "$r…

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