欢迎光临
我们一直在努力

MT5(C++)软件编程-希尔排序算法

  1. MT5(C++)软件编程十大排序算法 - 冒泡排序算法 (bubble Sort)
  2. MT5(C++)软件编程十大排序算法 - 选择排序算法 (select Sort)
  3. MT5(C++)软件编程十大排序算法 - 插入排序算法 (insert Sort)
  4. MT5(C++)软件编程十大排序算法 - 快速排序算法 (quick Sort)
  5. MT5(C++)软件编程十大排序算法 - 希尔排序算法 (shell Sort)
  6. MT5(C++)软件编程十大排序算法 - 堆排序算法 (heap Sort)
  7. MT5(C++)软件编程十大排序算法 - 归并排序算法 (merge Sort)
  8. MT5(C++)软件编程十大排序算法 - 计数排序算法 (counting Sort)
  9. MT5(C++)软件编程十大排序算法 - 桶排序算法 (bucket Sort)
  10. MT5(C++)软件编程十大排序算法 - 基数排序算法 (radix Sort)

1希尔排序算法
以二分之一分递归分割数组
arr: 需要排序的数组
seq: 排序的方向, true 为升序, false为降序

template <typename T1>
void shellSort(T1 &arr[], const bool seq = true)
{

    int gap,i,j,temp;
    int size = ArraySize(arr);
    if(seq)
    {
      gap = size >> 1;
      while(gap >= 1)
      {
        for(i=gap; i< size; i++) // gap 4
        {
          temp = arr[i];
          j = i - gap; // 4 - 4 = 0
          while(j >= 0 && arr[j] > temp)
          {
            arr[j + gap] = arr[j];
            j -= gap;
          }
          arr[j + gap] = temp;
        }
        gap >>= 1;
      }
    }
    else
    {
      gap = size >> 1;
      while(gap >= 1)
      {
        for(i=gap; i< size; i++) // gap 4
        {
          temp = arr[i];
          j = i - gap; // 4 - 4 = 0
          while(j >= 0 && arr[j] < temp)
          {
            arr[j + gap] = arr[j];
            j -= gap;
          }
          arr[j + gap] = temp;
        }
        gap >>= 1;
      }
    }
  
}

2希尔排序算法
以二分之一分递归分割数组
arr: 需要排序的数组
seq: 排序的方向, true 为升序, false为降序

template <typename T1>
void shellSort2(T1 &arr[], const bool seq = true)
{
  if(typename(arr) == "int" || typename(arr) == "double")
  {
    int gap,i,j,temp;
    int size = ArraySize(arr);
    if(seq)
    {
      gap = size >> 1;
      while(gap >= 1)
      {
        for(i=gap; i< size; i++) // gap 4
        {
         for(j = i; j - gap >= 0; j -= gap)
         {
          if(arr[j - gap] < arr[j]) break;
          if(arr[j - gap] > arr[j]) swap(arr[j],arr[j - gap]);
         }
        }
        gap >>= 1;
      }
    }
    else
    {
      gap = size >> 1;
      while(gap >= 1)
      {
        for(i=gap; i< size; i++) // gap 4
        {
         for(j = i; j - gap >= 0; j -= gap)
         {
          if(arr[j - gap] > arr[j]) break;
          if(arr[j - gap] < arr[j]) swap(arr[j],arr[j - gap]);
         }
        }
        gap >>= 1;
      }
    }
  }
}

 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

未经允许不得转载:瓜皮猫量化编程 » MT5(C++)软件编程-希尔排序算法
分享到: 生成海报

评论 抢沙发

  • QQ号
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

瓜皮猫量化交易编程

QQ群: 492653640微信: guapitcom
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活