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

选择、冒泡、插入排序

选择排序:

  • 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);
        }
    }
}
相关推荐
yzx99101333 分钟前
基于 Q-Learning 算法和 CNN 的强化学习实现方案
人工智能·算法·cnn
亮亮爱刷题36 分钟前
算法练习-回溯
算法
眼镜哥(with glasses)2 小时前
蓝桥杯 国赛2024python(b组)题目(1-3)
数据结构·算法·蓝桥杯
scdifsn6 小时前
动手学深度学习12.7. 参数服务器-笔记&练习(PyTorch)
pytorch·笔记·深度学习·分布式计算·数据并行·参数服务器
恰薯条的屑海鸥6 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
数据库·学习·安全·web安全·渗透测试·网络安全学习
int型码农6 小时前
数据结构第八章(一) 插入排序
c语言·数据结构·算法·排序算法·希尔排序
UFIT6 小时前
NoSQL之redis哨兵
java·前端·算法
喜欢吃燃面6 小时前
C++刷题:日期模拟(1)
c++·学习·算法
SHERlocked936 小时前
CPP 从 0 到 1 完成一个支持 future/promise 的 Windows 异步串口通信库
c++·算法·promise
怀旧,7 小时前
【数据结构】6. 时间与空间复杂度
java·数据结构·算法