欢迎光临
我们一直在努力

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)

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

template <typename T>
void heapSort(T &arr[],const bool seq = true)
{
  int len = ArraySize(arr);
  int start = len;
  int end = len - 1;
  
  while(start >= 0)
  {
    big_endian(arr,start,end,seq);
    start -= 1;
  }
  while(end > 0)
  {
    swap(arr[0],arr[end]);
    big_endian(arr,0,end -1,seq);
    end -= 1;
  }
}

template <typename T>
void big_endian(T &arr[], int start, int end, const bool seq = true)
{
  int root = start;
  int child = root * 2 + 1;
  if(seq)
  while(child <= end)
  {
    if(child + 1 <= end && arr[child] < arr[child + 1])
    {
      child += 1;
    }
    if(arr[root] < arr[child])
    {
      swap(arr[root],arr[child]);
      root = child;
      child = root * 2 + 1;
    }
    else break;
  }
  else
  while(child <= end)
  {
    if(child + 1 <= end && arr[child] > arr[child + 1])
    {
      child += 1;
    }
    if(arr[root] > arr[child])
    {
      swap(arr[root],arr[child]);
      root = child;
      child = root * 2 + 1;
    }
    else break;
  }
  
}
 收藏 (0) 打赏

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

支付宝扫一扫赞助

微信钱包扫描赞助

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

评论 抢沙发

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

瓜皮猫量化交易编程

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

登录

忘记密码 ?

切换登录

注册

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