当前位置: 首页 > article >正文

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

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

1. 冒泡排序(Bubble Sort)

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)

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)

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)

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)

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;

    /* 创建临时数组 */
    

http://www.kler.cn/a/273596.html

相关文章:

  • ENSP (虚拟路由冗余协议)VRRP配置
  • 云原生+AI核心技术&最佳实践
  • AI大模型如何重塑软件开发流程
  • Android亮屏Job的功耗优化方案
  • MongoDB 8.0.3版本安装教程
  • 代码随想录day20 二叉树(七)
  • 婚恋交友系统开发-PHP书写-uniAPP开发-安装环境7.3-数据库5.6-源码交付-支持二开!
  • django管理日志记录(日志审计django_admin_log)
  • p2p原理
  • WMware安装ghost镜像
  • 使用verilog写一个模拟比特币挖矿游戏及testbench
  • Stable Diffusion WebUI 生成参数:采样器(Sampling method)和采样步数(Sampling steps)
  • 【解读】NIST网络安全框架CSF 2.0
  • idea+vim+pycharm的块选择快捷键
  • WRF模型教程(ububtu系统)-WPS(WRF Pre-Processing System)概述
  • 常用pip命令
  • 在Latex中优雅的插入svg图片(Ubuntu22.04)
  • 事务、并发、锁机制的实现
  • EDI在汽车主机厂配送流程中的应用
  • Jenkins 一个进程存在多个实例问题排查
  • 深入解析MVCC:多版本并发控制的数据库之道
  • 自然语言:如何通过机器学习和自然语言处理技术训练生成一个AI?有没有代码展示
  • vite打包流程和原理
  • OpenCV Steger算法提取条纹中心线
  • Android Studio实现内容丰富的安卓美食管理发布平台
  • 【机器学习】函数