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;

    /* 创建临时数组 */
    
相关推荐
头发那是一根不剩了41 分钟前
Spring Boot 注解 @ConditionalOnMissingBean是什么
java·spring boot·后端
豆约翰44 分钟前
c#和python互操作实现排序算法可视化
python·c#·排序算法
ElvInR2 小时前
冒泡排序详解
c语言·c++·排序算法·冒泡排序
天若有情6732 小时前
探秘 C++ 计数器类:从基础实现到高级应用
java·开发语言·c++
进击的愤怒2 小时前
GIM发布新版本了 (附rust CLI制作brew bottle流程)
开发语言·后端·rust
x-cmd2 小时前
x-cmd install | cargo-selector:优雅管理 Rust 项目二进制与示例,开发体验升级
开发语言·后端·rust·cargo·示例
明天不下雨(牛客同名)2 小时前
介绍一下 MVCC
java·服务器·数据库
春生野草2 小时前
如何用JAVA手写一个Tomcat
java·开发语言·tomcat
小猪咪piggy3 小时前
【JavaEE】(1) 计算机如何工作
java
smileNicky3 小时前
SpringBoot系列之OpenAI API 创建智能博客评论助手
java·spring boot·后端