• 插入类排序


    1.直接插入类排序

    1. What:

    • 无序区的元素中,选择一个元素,把它插入到有序区 的适当位置中

    2.How:

    /*直接插入排序*/
    static void insertSort (int a[], int n)
    {
        int i = 0;
        int j = 0;
        int temp = 0;
    
        for (i=1; i < n; ++i)       //第一个元素已经在有序区,n 个数需要 n-1 次的插入
        {
            if (a[i-1] > a[i])        //有序区中的元素大于无序区中的元素
            {
                temp = a[i];            //保存无序区中的第一个元素
                j = i-1;                  //有序区中的最后一个元素
                while (j >= 0)  /* 插入的数字小于有序区的元素,需要移动元素 */
                {
                    a[j+1] = a[j];
                    --j;
                }
                a[j+1] = temp;
            }
        }
    
        return;
    }
    

    2. 折半插入排序

    1. What:

    • 有序区中的元素进行折半查找,找到要插入元素的位置下标。
    • 当有序区中的元素大于被插入的元素时需要移动有序区中的元素。

    2.How:

      static void halfInsertSort(int a[], int n)
      {
    
          int     i    = 0;
          int     j    = 0;
          int     temp = 0;
          int     low  = 0;
          int     high = 0;
          int     mid  = 0;
    
          for (i = 1; i < n; i++)
          {
              temp = a[i];          /* 保存无序区中的第一个元素 */
              //有序区中进行折半查找
              low = 0;
              high = i-1;
              while (low <= high)
              {
                  mid  = (low >> 1) + (high >> 1);
                  if (temp < a[mid])      
                  {
                      high = mid - 1;
                  }
                  else
                  {
                      low = mid + 1;
                  }
              }
    
              /* high < low */
              for (j = i-1; j>high; --j)
              {
                  a[j+1] = a[j];
              }
              
              a[high+1] = temp;
          }
      }
    

    3. 希尔排序

    1. What:

    • 缩小增量排序。
    • 每一趟把待排序的元素分为 n/d 组,每组有 d 个元素。

    2.How:

      /*希尔排序*/
      static void shellSort (int a[], int n)
      {
    
          int i    = 0;
          int j    = 0;
          int temp = 0;
          int d    = n >> 1;
    
          while (d)
          {
              for (i=d; i < n; ++i)
              {
                  if (a[i-d] > a[i])      //有序区 大于 无序区
                  {
                      temp = a[i];            //保存要插入的临时变量
                      j=i-d;
    
                      while ( j >= 0 )  /* 有序区中的元素 > 要插入的元素,需要移动元素 */
                      {
                          a[j+d] = a[j];
                          j = j-d;
                      }
    
                      a[j+d] = temp;
                  }
              }
    
              d = d >> 1;
          }
    
          return;
      }
  • 相关阅读:
    截取nginx日志
    wampserver安装之后无法打开localhost
    wampserver安装之后无法打开localhost
    wampserver安装之后无法打开localhost
    wampserver安装之后无法打开localhost
    gitlab给用户添加提交到主干的权限
    动手为王 | Oracle 数据库跨版本升级迁移实践
    ie8关于@font-face无效的兼容问题
    web自定义中文字体
    django 前后台交互过程
  • 原文地址:https://www.cnblogs.com/hwfre/p/16032743.html
Copyright © 2020-2023  润新知