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;

    }

    }
    我们唯一能够控制的是自己的脾气和努力
  • 相关阅读:
    全国各地DNS(电信,移动,联通,教育网)
    全国各地电信DNS服务器地址
    免费公共 DNS 大全
    免费公共DNS服务器 全球DNS服务器 国内DNS服务器
    AT指令发送短信
    OpenWrt 定期检测进程是否存在并重启
    OpenWrt 计划任务使用方法
    openwrt-mt7688 修改默认的WIFI SSID
    在MT7628实现wan、wwan与4G动态切换
    Unix常用命令之修改密码
  • 原文地址:https://www.cnblogs.com/itall/p/10900572.html
Copyright © 2011-2022 走看看