理想 == 离乡
慢点_慢点_再慢点__静点_静点_再静点

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;
  }
posted on 2022-03-20 23:26  hwfre  阅读(38)  评论(0编辑  收藏  举报