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

选择、冒泡、插入排序

选择排序:

  • 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);
        }
    }
}
相关推荐
散峰而望5 分钟前
C/C++输入输出初级(一) (算法竞赛)
c语言·开发语言·c++·算法·github
Kuo-Teng13 分钟前
LeetCode 160: Intersection of Two Linked Lists
java·算法·leetcode·职场和发展
鸽子一号23 分钟前
c#笔记之面向对象
笔记
fie888931 分钟前
基于MATLAB的狼群算法实现
开发语言·算法·matlab
偷偷的卷1 小时前
【算法笔记 11】贪心策略六
笔记·算法
ZPC82101 小时前
FPGA 部署ONNX
人工智能·python·算法·机器人
河铃旅鹿2 小时前
Android开发-java版:布局
android·笔记·学习
_w_z_j_2 小时前
爱丽丝的人偶
算法
奋斗的牛马2 小时前
FPGA--zynq学习 PS与PL交互(二) HP接口
单片机·嵌入式硬件·学习·fpga开发·信息与通信
华清远见成都中心2 小时前
分享一个驱动开发工程师学习路线图
驱动开发·学习