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

选择、冒泡、插入排序

选择排序:

  • 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 小时前
Day32| 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
算法
小坏坏的大世界1 小时前
C++ STL常用容器总结(vector, deque, list, map, set)
c++·算法
im_AMBER3 小时前
学习日志19 python
python·学习
励志要当大牛的小白菜4 小时前
ART配对软件使用
开发语言·c++·qt·算法
qq_513970444 小时前
力扣 hot100 Day56
算法·leetcode
PAK向日葵5 小时前
【算法导论】如何攻克一道Hard难度的LeetCode题?以「寻找两个正序数组的中位数」为例
c++·算法·面试
爱喝矿泉水的猛男7 小时前
非定长滑动窗口(持续更新)
算法·leetcode·职场和发展
_Kayo_7 小时前
VUE2 学习笔记6 vue数据监测原理
vue.js·笔记·学习
YuTaoShao7 小时前
【LeetCode 热题 100】131. 分割回文串——回溯
java·算法·leetcode·深度优先
chenchihwen7 小时前
大模型应用班-第2课 DeepSeek使用与提示词工程课程重点 学习ollama 安装 用deepseek-r1:1.5b 分析PDF 内容
人工智能·学习