java 常见排序算法以及详细代码

下面是Java中常见排序算法的详细代码实现:

1. 冒泡排序(Bubble Sort)

java 复制代码
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;
            }
        }
    }
}

2. 选择排序(Selection Sort)

java 复制代码
public static void selectionSort(int[] arr) {
    int n = arr.length;
    for (int i = 0; i < n - 1; i++) {
        int minIndex = i;
        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        // 交换找到的最小值和第i个位置上的元素
        int temp = arr[minIndex];
        arr[minIndex] = arr[i];
        arr[i] = temp;
    }
}

3. 插入排序(Insertion Sort)

java 复制代码
public static void insertionSort(int[] arr) {
    int n = arr.length;
    for (int i = 1; i < n; ++i) {
        int key = arr[i];
        int j = i - 1;

        /* 将arr[i]移动到正确的位置 */
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        arr[j + 1] = key;
    }
}

4. 快速排序(Quick Sort)

java 复制代码
public static void quickSort(int[] arr, int low, int high) {
    if (low < high) {
        // pi 是分区索引,arr[pi] 现在在正确的位置
        int pi = partition(arr, low, high);

        // 分别对左右子数组进行快速排序
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

// 分区操作
public 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++) {
        // 如果当前元素小于或等于 pivot
        if (arr[j] <= pivot) {
            i++;

            // 交换 arr[i] 和 arr[j]
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }

    // 交换 arr[i + 1] 和 arr[high](或 pivot)
    int temp = arr[i + 1];
    arr[i + 1] = arr[high];
    arr[high] = temp;

    return i + 1;
}

5. 归并排序(Merge Sort)

java 复制代码
public static void mergeSort(int[] arr, int left, int right) {
    if (left < right) {
        // 找到中间位置
        int mid = (left + right) / 2;

        // 对左半部分进行归并排序
        mergeSort(arr, left, mid);

        // 对右半部分进行归并排序
        mergeSort(arr, mid + 1, right);

        // 合并两个有序数组
        merge(arr, left, mid, right);
    }
}

// 合并两个有序数组
public static void merge(int[] arr, int left, int mid, int right) {
    // 找到两个子数组的大小
    int n1 = mid - left + 1;
    int n2 = right - mid;

    /* 创建临时数组 */
    
相关推荐
小周在成长几秒前
Java 封装(Encapsulation)指南
后端
sheji34162 分钟前
【开题答辩全过程】以 基于Spring Boot的驾校预约练车系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
p***q782 分钟前
springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice
spring boot·后端·docker
zhengzizhe5 分钟前
三傻排序(冒泡,选择,插入)Java大白话(老毕登可以跳过)
后端
嘟嘟w5 分钟前
JVM的内存结构
java·jvm
Zfox_6 分钟前
【Go】 协程和 channel
开发语言·后端·golang
a***13146 分钟前
【玩转全栈】----Django制作部门管理页面
后端·python·django
g***727010 分钟前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
Mr.wangh11 分钟前
SpringCloud面试题总结
后端·spring·spring cloud
r***869815 分钟前
搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
android·前端·后端