zoukankan      html  css  js  c++  java
  • 排序算法(插入排序)

      关于排序算法,常见的大致有:冒泡排序、插入排序、选择排序、快速排序、归并排序、桶排序、计数排序等。每一种排序算法都有它们各自的优劣和适用场景。一般可以从这么几个角度来衡量排序算法:

      1.最好时间复杂度、最坏时间复杂度、平均时间复杂度

      2.是否是原地排序算法:原地排序算法,指空间复杂度为O(1)

      3.是否是稳定排序算法:稳定排序算法,指如果待排序序列中有值相等的元素,经过排序之后,值相等元素的顺序保持不变

      关于插入排序算法(Insertion sort):

      

       代码实现:

      

    /**
    * 插入排序:
    * 1.将数组中的数据分为两个区间:已排序区间、未排序区间
    * 2.初始已排序区间,只有一个元素(第一个元素)
    * 3.重复取未排序区间中的元素,插入到已排序区间的合适位置,保证有序区间一直有序
    * 4.直到未排序区间元素为空,算法结束
    * 5.插入排序是原地排序:空间复杂度O(1)
    * 6.插入排序是稳定的排序
    * 7.最好时间复杂度:O(n)
    * 8.最坏时间复杂度、平均时间复杂度:都是O(n^2)
    *
    * @param a 待排序序列
    * @param n 数据规模
    */
    public static void insertionSort(int[] a,int n){
    if(n <=1) return;

    // 把数组中的数据分为:已排序区间、未排序区间
    // 已排序区间初始只有第一个元素,其他元素都属于未排序区间
    for(int i=1;i<n;++i){

    // 从未排序区间取元素
    int value=a[i];
    // 移动数据(j是已排序区间的末尾坐标)
    int j=i-1;
    for(;j>=0;--j){
    if(a[j]>value){
    a[j+1]=a[j];
    }else{// 不需要移动(当前j+1的位置,就是要插入元素的位置)
    break;
    }
    }

    //插入数据
    a[j+1]=value;

    }

    }
    我们唯一能够控制的是自己的脾气和努力
  • 相关阅读:
    css学习_css3伸缩布局 flex布局
    css学习_cs3s旋转的图片
    css学习_css3过渡
    css学习_css伪元素的本质
    css学习_css精灵技术、字体图标
    css学习_css用户界面样式
    Python 的 with 语句
    KNN--Python实现
    Python中NumPy(axis=0 与axis=1)
    Python中escape和unescape
  • 原文地址:https://www.cnblogs.com/itall/p/10900572.html
Copyright © 2011-2022 走看看