zoukankan      html  css  js  c++  java
  • 排序算法3

    排序算法3 - 插入排序

    算法思路

    目前第 0 位到第 0 位已经有序,而第 0 位到第 n -1 位想要有序

    将第 1 位的数与前面的数进行比较,插入到合适的位置,此时第 0 位到第 1 位变得有序

    将第 2 位的数与前面的数进行比较,插入到合适的位置,此时第 0 位到第 2 位变得有序

    以此类推,直到所有元素均排序完毕

    代码实现

    public void insertionSort(int[] arr) {
    for (int i = 0; i < arr.length - 1; i++) {
    for (int j = i + 1; j >= 0; j--) {// 将第 i+1 位的数依次与前面的数进行比较
    if (arr[j] - 1 > arr[j]) { // 如果前面的数比较大,则进行交换
    swap(arr, j - 1, j); // 交换 j-1 和 j 位的值
    } else { // 如果前面的数不大于第 i+1 位的数,
    break; // 则表明已经插到了正确的位置,可以结束此轮排序,进行下一轮的排序
          }
        }
      }
    }
    
    private void swap(int[] arr, int i, int j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
    }
    

    复杂度分析

    1. 时间复杂度

    插入排序最好的情况就是数组元素本身就有序,这是最优的情况,每一个数只需和前面的元素比较一次即可,所以时间复杂度为 O(n)

    最坏的情况就是数组是逆序的,此时时间复杂度为 O(n²)

    而时间复杂度 O( ) 是按最坏情况估计,是最差情况下的指标,所以插入排序的时间复杂度为 O(n²)

    2. 空间复杂度

    不占用额外的内存空间,即空间复杂度为常数阶 O(1)

    欢迎大家来我博客逛逛 mmimo技术小栈

  • 相关阅读:
    react引用antd的form表单
    前端学习之--谷歌浏览器使用
    react引用ant的table组件
    git 提交解决冲突
    git将本地仓库推送到远程仓库
    操作DOM
    javaScript基础篇之数据类型
    css之水平居中设置
    css之颜色值、单位
    CSS属性简写
  • 原文地址:https://www.cnblogs.com/mmimo/p/15388007.html
Copyright © 2011-2022 走看看