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

选择、冒泡、插入排序

选择排序:

  • 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);
        }
    }
}
相关推荐
向上的车轮1 小时前
MATLAB学习笔记(七):MATLAB建模城市的雨季防洪排污的问题
笔记·学习·matlab
phoenix@Capricornus1 小时前
反向传播算法——矩阵形式递推公式——ReLU传递函数
算法·机器学习·矩阵
Inverse1621 小时前
C语言_动态内存管理
c语言·数据结构·算法
数据与人工智能律师2 小时前
虚拟主播肖像权保护,数字时代的法律博弈
大数据·网络·人工智能·算法·区块链
躺着听Jay2 小时前
Oracle-相关笔记
数据库·笔记·oracle
田梓燊2 小时前
数学复习笔记 19
笔记·线性代数·机器学习
前端小崔2 小时前
从零开始学习three.js(18):一文详解three.js中的着色器Shader
前端·javascript·学习·3d·webgl·数据可视化·着色器
wuqingshun3141592 小时前
蓝桥杯 16. 外卖店优先级
c++·算法·职场和发展·蓝桥杯·深度优先
逼子格2 小时前
硬件工程师笔记——二极管Multisim电路仿真实验汇总
笔记·嵌入式硬件·硬件工程师·multisim·硬件工程师学习·电子器件·电路图
YouQian7723 小时前
2025春训第十九场
算法