java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述

下面我将详细讲解java中常见的几种排序算法,分别为合并排序算法、冒泡排序算法、选择排序算法、插入排序算法和快速排序算法。

合并排序算法(Merge Sort)

合并排序算法也称为归并排序,其基本思想为将待排序的序列分成若干个子序列,然后对每个子序列进行排序,最后将所有子序列合并成一个有序序列。

以下是Java实现合并排序的示例代码:

public static void MergeSort(int[] arr) {
    if (arr == null || arr.length < 2) {
        return;
    }
    mergeSort(arr, 0, arr.length - 1);
}

private static void mergeSort(int[] arr, int lo, int hi) {
    if (lo >= hi) {
        return;
    }
    int mid = lo + (hi - lo) / 2;
    mergeSort(arr, lo, mid);
    mergeSort(arr, mid + 1, hi);
    merge(arr, lo, mid, hi);
}

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

该示例中采用递归的方式实现了合并排序,时间复杂度为O(nlogn),其中n为待排序序列的长度。

冒泡排序算法(Bubble Sort)

冒泡排序算法是通过比较相邻元素的大小进行排序的。具体来说,它依次比较相邻的两个元素,如果前一个比后一个大,就交换这两个元素。

以下是Java实现冒泡排序的示例代码:

public static void BubbleSort(int[] arr) {
    if (arr == null || arr.length < 2) {
        return;
    }
    for (int i = 0; i < arr.length - 1; i++) {
        for (int j = 0; j < arr.length - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

该示例中采用双层循环实现了冒泡排序,时间复杂度为O(n^2),其中n为待排序序列的长度。

选择排序算法(Selection Sort)

选择排序算法是通过枚举待排序序列中最小(或最大)的元素并将其放到已排序序列的末尾进行排序的。

以下是Java实现选择排序的示例代码:

public static void SelectionSort(int[] arr) {
    if (arr == null || arr.length < 2) {
        return;
    }
    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;
            }
        }
        if (minIndex != i) {
            int temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }
}

该示例中采用双层循环实现了选择排序,时间复杂度为O(n^2),其中n为待排序序列的长度。

插入排序算法(Insertion Sort)

插入排序算法是通过将待排序序列划分为已排序部分和未排序部分,并将未排序部分的元素一个一个插入到已排序部分中的排序算法。

以下是Java实现插入排序的示例代码:

public static void InsertionSort(int[] arr) {
    if (arr == null || arr.length < 2) {
        return;
    }
    for (int i = 1; i < arr.length; i++) {
        int value = arr[i];
        int j = i - 1;
        for (; j >= 0 && arr[j] > value; j--) {
            arr[j + 1] = arr[j];
        }
        arr[j + 1] = value;
    }
}

该示例中采用双层循环实现了插入排序,时间复杂度为O(n^2),其中n为待排序序列的长度。

快速排序算法(Quick Sort)

快速排序算法也是一种基于分治思想的排序算法,它通过选取一个基准值(通常为待排序序列的第一个元素),将待排序序列划分为左右两个部分,使得左半部分的元素均小于基准值,右半部分的元素均大于基准值,并递归地对左右两个部分进行排序。

以下是Java实现快速排序的示例代码:

public static void QuickSort(int[] arr) {
    if (arr == null || arr.length < 2) {
        return;
    }
    quickSort(arr, 0, arr.length - 1);
}

private static void quickSort(int[] arr, int lo, int hi) {
    if (lo >= hi) {
        return;
    }
    int pivot = partition(arr, lo, hi);
    quickSort(arr, lo, pivot - 1);
    quickSort(arr, pivot + 1, hi);
}

private static int partition(int[] arr, int lo, int hi) {
    int pivot = arr[lo];
    int i = lo, j = hi + 1;
    while (true) {
        while (arr[++i] < pivot) {
            if (i == hi) {
                break;
            }
        }
        while (arr[--j] > pivot) {
            if (j == lo) {
                break;
            }
        }
        if (i >= j) {
            break;
        }
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    arr[lo] = arr[j];
    arr[j] = pivot;
    return j;
}

该示例中采用递归的方式实现了快速排序,时间复杂度为O(nlogn),其中n为待排序序列的长度。

以上就是对Java常见的几种排序算法的完整攻略,每种算法的基本思想和示例代码都已详细讲解,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述 - Python技术站

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

相关文章

  • Java Springboot自动装配原理详解

    Java Springboot自动装配原理详解 背景 为了提高开发效率并减少代码冗余,Spring Boot引入了自动装配的机制。这使得我们不需要手动添加大量的配置文件和代码,就可以快速搭建一个可运行的应用。 自动装配原理 Spring Boot的自动装配原理就是依赖注入(DI)和控制反转(IOC)的应用。当Spring Boot发现某个Bean被多个模块所…

    Java 2023年5月19日
    00
  • Hibernate中5个核心接口知识点整理

    当我们使用Hibernate进行数据库操作时,会经常接触到如下5个核心接口: SessionFactory Session Transaction Query Criteria 它们分别是什么,有何作用?下面我们进行详细讲解。 SessionFactory SessionFactory是Hibernate的核心接口之一,通常也是Hibernate启动过程中的…

    Java 2023年5月19日
    00
  • 前台js对象在后台转化java对象的问题探讨

    前台js对象在后台转化java对象的问题探讨 当我们使用前后端分离的架构时,前台js对象与后台java对象之间需要进行转化。在这个过程中会遇到一些问题,如何解决这些问题呢?下面就来探讨一下这个问题。 第一步:前台js对象转化为后台json对象 前台js对象可以通过JSON.stringify()方法转化为json对象,具体操作如下: var jsObject…

    Java 2023年5月26日
    00
  • Maven 仓库国内镜像源收藏(小结)

    Maven 仓库国内镜像源收藏(小结) 什么是 Maven 仓库? Maven 仓库是存储已构建的 Maven 项目的位置,可以简单地认为是包含依赖包的一个容器。 为什么需要 Maven 仓库国内镜像源? 默认情况下,Maven 仓库使用的是海外镜像源,下载速度较慢。使用国内镜像源能够提高构建项目的速度。因此,我们需要使用国内的镜像源来代替海外的。 如何使用…

    Java 2023年5月20日
    00
  • ajax从JSP传递对象数组到后台的方法

    下面我将详细讲解“ajax从JSP传递对象数组到后台的方法”的完整攻略。 一、前提准备 在进行ajax传递对象数组到后台的操作前,我们需要事先做好以下准备: 后台代码准备好接收对象数组并进行相应的处理; 编写好前端的页面代码,包括页面元素、事件绑定等; 引入jQuery库,方便进行ajax操作。 二、实现步骤 定义对象数组 首先,我们需要定义一个JavaSc…

    Java 2023年6月15日
    00
  • Java实现超市会员管理系统

    Java实现超市会员管理系统攻略 准备工作 安装Java开发环境:推荐使用Eclipse或IntelliJ IDEA等集成开发环境。 了解Java GUI开发框架:Java Swing。 选择数据库:常用的关系型数据库有MySQL、Oracle、SQL Server等,非关系型数据库有MongoDB、Redis等。 功能设计 根据超市的实际情况,确定要实现的…

    Java 2023年5月24日
    00
  • Java中的==使用方法详解

    Java中的==使用方法详解 在Java中,==是一种用于比较两个变量是否相等的运算符,但是它的使用方法有一些需要注意的地方。 关于==和equals()方法 在Java中,==用于比较两个变量的引用地址是否相等,即它们是否指向同一块内存地址。而equals()方法通常被用来比较两个对象的内容是否相等。 示例1: String str1 = "he…

    Java 2023年5月20日
    00
  • springboot+spring data jpa实现新增及批量新增方式

    下面是关于springboot+spring data jpa实现新增及批量新增方式的完整攻略,希望能对您有所帮助。 1. 准备工作 在开始之前,我们需要确保使用的开发环境已经具备以下条件: JDK 8 或以上 Maven 3.2 或以上 IDE:Eclipse 或 IntelliJ IDEA 2. 创建Spring Boot 项目 首先,我们需要创建一个新…

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