• 直接插入排序


    //直接插入排序 1               
    void Insertsort1(int a[],int n)
    {
        int i,j;
        int tmp;
        for(i=1;i<n;i++)
        {
            if(a[i] < a[i-1])   //如果当前所要插入的数比已排序好的最大的数大
                                //则不需要再进行比较,直接放到当前位置
            {
             tmp = a[i];
             for(j=i-1;j>=0;j--)
             {
               if(a[j] > tmp)   
                     a[j+1] = a[j];  //将比tmp的值往后排
               else break; 
             }
             a[j+1] = tmp;     //找到合适的位置
            }
         }
    }
    
    //别人博客上写得更加精简
    void Insertsort2(int a[], int n)
    {
        int i, j;
        for (i = 1; i < n; i++)
            if (a[i] < a[i - 1])
            {
                int temp = a[i];
                for (j = i - 1; j >= 0 && a[j] > temp; j--)
                    a[j + 1] = a[j];
                a[j + 1] = temp;
            }
    }
    
    
    
    //直接插入排序2   交换顺序,而非将比tmp的值往后放
    void Insertsort3(int a[],int n)
    {
        int i,j;
        for(i=1;i<n;i++)
        {
            if(a[i] < a[i-1])   //如果当前所要插入的数比已排序好的最大的数大
                                //则不需要再进行比较,直接放到当前位置
            {
              for(j=i-1;j>=0;j--)
              {
               if(a[j] > a[j+1])   
                    Swap(a[j],a[j+1]);
               else break; 
              }
            }
         }
    }

     复杂度:因为两层for循环嵌套,故为O(n^2);

     稳定性:稳定。因为a[j]>tmp,即只有比tmp大的才往后移动,和他相等并不往后移动。

  • 相关阅读:
    WKT转换工具terraformers
    关于微信公众号投票结果的通告
    个人博客03
    个人博客02
    个人博客01
    四则运算2
    学习进度条
    构建之法阅读笔记01
    错误随笔
    软件工程概论第一节
  • 原文地址:https://www.cnblogs.com/dzy521/p/9374938.html
Copyright © 2020-2023  润新知