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;

    }

    }
    我们唯一能够控制的是自己的脾气和努力
  • 相关阅读:
    LWIP的底层结构(物理层)
    Source insight 支持汇编
    Camera Vision
    i2c-tools的使用方法及举例
    浅析C语言中strtol()函数与strtoul()函数的用法
    CF540C Ice Cave
    CF540B School Marks
    hdu5122 K.Bro Sorting
    hdu1013 Digital Roots
    蓝桥杯 算法提高 递推求值
  • 原文地址:https://www.cnblogs.com/itall/p/10900572.html
Copyright © 2011-2022 走看看