zoukankan      html  css  js  c++  java
  • 直接插入排序

     1 void Insertsort(int * L ,int n)
     2 {
     3     if(n<= 0)
     4         return ;
     5     int tip = 0;
     6 
     7     for(int i = 0 ; i< n-1; i++) //最开始这里循环到0-n导致错误
     8     {
     9         if(L[i+1] < L[i])
    10         {
    11             int temp = L[i+1];
    12             
    13             for(int j = i ;j >= 0 && L[j] > temp ;j--)
    14             {
    15                 L[j+1] = L[j];
    16                 tip = j;
    17             }
    18             L[tip]  = temp;
    19         }
    20     }
    21     
    22 }

    一开始在最上面的循环开始,i的范围过大,

    可以看下面数组的下标,在进行操作的时候,如果出现 i+1的时候,就要注意i的循环上限是否需要减一,当循环中出现i-1的时候,循环i

    的下限是否需要加一!!!

    直接插入排序 的时间复杂度:最好的情况为o(n)   最坏的情况为o(nxn)  平均情况为 o(nxn)

    空间复杂度为o(1);

    冒泡,简单选择和直接插入都是简单算法,这里面的直接插入的性能优于简单选择,简单选择优于冒泡。

    冒泡是遍历每一个元素进行比较,进行交换

    简单选择是遍历每个元素,选择最小的,然后进行一次交换,一次遍历

    直接插入是,不用遍历每一个元素,直接按照前后进行插入。

    三个算法都是稳定算法。

  • 相关阅读:
    ORACLE AWR 和 ASH
    11g RAC R2 日常巡检--Grid
    Linux中重命名文件
    Xshell4连接Linux后 win快捷键锁屏
    vim 删除临时文件
    shell--read命令
    shell基础篇(一)从hello world开始
    ORACLE--分区表数据清理
    Shell—学习之心得
    awk 手册--【转载】
  • 原文地址:https://www.cnblogs.com/xiaochige/p/8365375.html
Copyright © 2011-2022 走看看