算法学习笔记——选择、冒泡、插入排序

选择、冒泡、插入排序

选择排序:

  • i~n-1 范围上,找到最小值并放在i位置,然后i+1~n-1范围上继续
java 复制代码
// 数字中交换i和j位置的数
public static void swap(int[] arr, int i, int j){
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}
// 选择排序
public static void selectionSort(int[] arr){
    if (arr == null || arr.length < 2){
        return;
    }
    for (int minIndex, i = 0; i < arr.length - 1; i++){
        minIndex = i;
        for (int j = i + 1; j < arr.length; j++){
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        swap(arr, i, minIndex);
    }
}

冒泡排序:

  • 0~1范围上,相邻位置较大的数滚下去,最大值最终来到i位置,然后0~i-1范围上继续
java 复制代码
// 数字中交换i和j位置的数
public static void swap(int[] arr, int i, int j){
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}
// 冒泡排序
public static void bubbleSort(int[] arr){
     if (arr == null || arr.length < 2){
        return;
    }
    // 0 ~ n-1
    // 0 ~ n-2
    // 0 ~ n-3
    // 0 ~ end--
    // 0 ~ 0
    for (int end = arr.length - 1; end > 0; end--){
        // 0 ~ end
        // 0 1 i == 0 1
        // 1 2 i == 1 2
        // 2 3 i == 2 3
        // 3 4
        // 4 5
        // end-1 end
        for (int i = 0; i < end; i++){
            if (arr[i] > arr[i + 1]) {
                swap(arr, i, i + 1);
            }
        }
    }
}

插入排序:

  • 0~1范围上已经有序,新来的数从右到左滑到不再小的位置插入,然后继续
java 复制代码
// 数字中交换i和j位置的数
public static void swap(int[] arr, int i, int j){
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}
// 插入排序
public static void insertionSort(int[] arr){
    if (arr == null || arr.length < 2){
        return;
    }
    for (int i = 1; i < arr.length; i++){
        for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--){
            // 需要进行交换的数一直是j+1,当 j+1 < j 则交换停下 或者 j < 0 也交换停下
            swap(arr, j, j + 1);
        }
    }
}
相关推荐
zyl7654 小时前
FlashAttention 详解:从 GPU 硬件、普通 Attention 到分块计算与 Online Softmax
算法
爱读书的小胖8 小时前
LeetCode 122:买卖股票的最佳时机 II(C)解题分析
算法
结局无敌8 小时前
React Native for OpenHarmony 实战:三方库 react-native-modal-dialog 的鸿蒙化适配指南
深度学习·算法·react native·react.js·harmonyos
~patience~8 小时前
WAV 逆向分析工具使用笔记
笔记
滴啦嘟啦哒8 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
OPEN-F8 小时前
ROS2系列教程:上位机建图与导航(原理综合)
算法·机器人
weixin_307779138 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
xier_ran8 小时前
【infra之路】AI 编译器学习笔记(十三):AI 编译器全景——TVM、XLA、IREE 与其他
人工智能·笔记·学习
连山齐名8 小时前
ai应用开发的学习笔记
服务器·笔记·学习
tomwang03228 小时前
路径优化建模、优化算法分类及工程化小结
算法·数学建模·分类