JAVA中的交换类排序算法详解

简介: JAVA中的交换类排序算法详解

一、引言

在Java编程中,排序是经常遇到的问题之一。对于各种数据类型,特别是基本数据类型和对象的集合,我们需要按照特定的规则(如升序或降序)进行排序。交换类排序算法是一种基于比较和交换数据元素的排序方法,它通过不断地比较和交换相邻元素的位置,最终使得整个序列有序。本文将详细介绍两种常见的交换类排序算法:冒泡排序和快速排序,并通过Java代码进行实现。


二、冒泡排序(Bubble Sort)

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

下面是一个使用Java实现的冒泡排序算法示例:


public class BubbleSort {
public static void bubbleSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换 arr[j] 和 arr[j+1]
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
public static void main(String[] args) {
    int[] arr = {64, 34, 25, 12, 22, 11, 90};
    bubbleSort(arr);
    System.out.println("排序后的数组:");
    for (int i : arr) {
        System.out.print(i + " ");
    }
}}


在上面的代码中,我们定义了一个bubbleSort方法来实现冒泡排序,该方法接受一个整数数组作为参数。在排序过程中,我们使用两个嵌套的for循环来遍历数组,并比较相邻的元素。如果前一个元素大于后一个元素,则交换它们的位置。


三、快速排序(Quick Sort)

快速排序是一种高效的排序算法,它采用分而治之的策略。通过选择一个基准元素,将数组分成两个子数组,一个包含所有小于基准的元素,另一个包含所有大于基准的元素。然后递归地对这两个子数组进行快速排序。

下面是一个使用Java实现的快速排序算法示例:


public class QuickSort {
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
// 找到中间索引
int pi = partition(arr, low, high);
// 分别对左右子数组进行快速排序
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}
// 分区操作
private static int partition(int[] arr, int low, int high) {
    int pivot = arr[high];    // 选择基准元素
    int i = (low - 1);  // 小于基准元素的索引
    for (int j = low; j <= high - 1; j++) {
        // 如果当前元素小于或等于基准元素
        if (arr[j] <= pivot) {
            i++;    // 递增索引i
            // 交换arr[i]和arr[j]
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    // 将基准元素放到正确的位置
    int temp = arr[i + 1];
    arr[i + 1] = arr[high];
    arr[high] = temp;
    return i + 1;
}
// 测试代码
public static void main(String[] args) {
    int[] arr = {10, 7, 8, 9, 1, 5};
    int n = arr.length;
    quickSort(arr, 0, n - 1);
    System.out.println("排序后的数组:");
    for (int i = 0; i < n; ++i)
        System.out.print(arr[i] + " ");
}}


在上面的代码中,我们定义了一个quickSort方法来实现快速排序,该方法接受一个整数数组以及要排序的子数组的低索引和高索引作为参数。我们还定义了一个partition方法来实现分区操作,它选择一个基准元素,并将数组分成两个子数组。然后,我们递归地对这两个子数组进行快速排序。


四、总结

交换类排序算法是一类基于比较和交换的排序方法,其中冒泡排序和快速排序是两种常见的算法。冒泡排序简单易懂,但效率较低,适用于小规模数据的排序。而快速排序则是一种高效的排序算法,它采用分而治之的策略,能够在平均情况下达到O(n log n)的时间复杂度。在实际应用中,我们可以根据具体的需求和数据规模选择合适的排序算法。

目录
相关文章
|
4月前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
283 101
|
4月前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
323 100
|
5月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
484 143
|
3月前
|
设计模式 算法 搜索推荐
Java 设计模式之策略模式:灵活切换算法的艺术
策略模式通过封装不同算法并实现灵活切换,将算法与使用解耦。以支付为例,微信、支付宝等支付方式作为独立策略,购物车根据选择调用对应支付逻辑,提升代码可维护性与扩展性,避免冗长条件判断,符合开闭原则。
499 35
|
3月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
168 4
|
3月前
|
存储 算法 搜索推荐
《数据之美》:Java数据结构与算法精要
本系列深入探讨数据结构与算法的核心原理及Java实现,涵盖线性与非线性结构、常用算法分类、复杂度分析及集合框架应用,助你提升程序效率,掌握编程底层逻辑。
|
3月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
248 5
|
3月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
339 5
|
3月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
243 1
|
3月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
291 1