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 Servlet异步请求开启的简单步骤

    下面是针对Java Servlet异步请求开启的简单步骤的详细攻略: 1. 确定异步请求的类型 在开发Servlet异步请求前,需要着重考虑请求的类型,以便确定适当的开发方法。异步请求可以分为以下两种类型: 长轮询请求 (Long Polling): 在这种类型的请求中,客户端发送一个请求到服务器,服务器不会立即响应请求。相反,服务器将保持此请求打开,并在数…

    Java 2023年6月15日
    00
  • Spring AOP实现多数据源动态切换

    关于Spring AOP实现多数据源动态切换的攻略,我提供如下完整的步骤: 一、添加依赖 在Maven工程的pom.xml文件中,添加如下的Spring AOP和JDBC依赖: <dependencies> <dependency> <groupId>org.springframework</groupId> …

    Java 2023年5月20日
    00
  • IDEA2019.3配置Hibernate的详细教程(未使用IDEA的自动化)

    下面就为你详细讲解“IDEA2019.3配置Hibernate的详细教程(未使用IDEA的自动化)”。 1. 下载Hibernate框架及其相关依赖 首先,要使用Hibernate框架,你需要先下载Hibernate框架及其相关依赖。可以从官方网站https://hibernate.org/orm/下载最新版的Hibernate框架。另外需要注意的是,Hib…

    Java 2023年5月19日
    00
  • iOS音乐播放器实现代码完整版

    “iOS音乐播放器实现代码完整版”是一篇关于在iOS平台上实现音乐播放器的完整教程,以下是该攻略的详细讲解: 1. 概述 本文将详细介绍在iOS平台开发一个完整的音乐播放器所需的代码实现步骤。我们将会使用Apple提供的AVFoundation框架来完成音频的播放、暂停、停止、快进、快退、调整音量等基本操作,并且在界面上展示当前音频的播放进度、歌曲信息、专辑…

    Java 2023年6月15日
    00
  • 关于Java中的IO流总结(推荐)

    关于Java中的IO流总结(推荐) 概述 在Java中,IO(Input/Output)流是通常用于读取和写入数据的方式。在Java中的IO包提供了很多实现,包括了输入/输出流、文件读取和写入、网络数据传输等。IO流以字节流和字符流两种形式存在,对应到Java中分别为InputStream/OutputStream和Reader/Writer。 IO流的分类…

    Java 2023年5月26日
    00
  • Java生成日期时间存入Mysql数据库的实现方法

    非常感谢您对Java生成日期时间存入Mysql数据库的实现方法的关注。 下面是具体实现步骤和示例代码: 1. 准备工作 确保已经安装好了Java和Mysql,并且已经存在一个名为“test”的数据库。 导入mysql-connector-java-5.1.49-bin.jar包(版本可根据实际情况进行更换)。 2. 创建数据库表 创建一个名为“user”的表…

    Java 2023年5月20日
    00
  • Spring MVC 自定义数据转换器的思路案例详解

    Spring MVC 自定义数据转换器的思路案例详解 Spring MVC 是一个非常流行的 Java Web 框架,它提供了很多便捷的功能,其中包括数据转换器。数据转换器可以将请求参数转换为 Java 对象,或将 Java 对象转换为响应参数。Spring MVC 默认提供了很多数据转换器,但有时候我们需要自定义数据转换器来满足特定的需求。本文将详细讲解 …

    Java 2023年5月18日
    00
  • Springboot集成Spring Security实现JWT认证的步骤详解

    针对“Springboot集成Spring Security实现JWT认证的步骤详解”这个主题,我将从以下几个方面给出详细的解答: Spring Security、JWT和Spring Boot的基本概念介绍 JWT认证的基本过程及原理 Springboot集成Spring Security实现JWT认证的步骤详解 两个示例: a. 基于用户名密码认证,返回…

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