欢迎光临
我们一直在努力

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 T>
void insertSort(T & arr[],const bool seq=true)
{
  if(typename(arr) == "int" || typename(arr) == "double")
  {
    int size = ArraySize(arr);
    int insertIndex = 0;
    if(seq)
    {
      for(int i=0; i<size;i++)
      {
        insertIndex = i;
        while(insertIndex >= 1)
        {
          if(arr[insertIndex - 1] > arr[insertIndex])
          swap(arr[insertIndex - 1], arr[insertIndex]);
          insertIndex--;
        }
      }
    }
    else
    {
      for(int i=0; i<size;i++)
      {
        insertIndex = i;
        while(insertIndex >= 1)
        {
          if(arr[insertIndex - 1] < arr[insertIndex])
          swap(arr[insertIndex - 1], arr[insertIndex]);
          insertIndex--;
        }
      }
    }
    
  }
  
}

2折半插入排序算法
每产生一个新的无序元素就和前面排序好的元素进行重新排序
arr: 需要排序的数组
seq: 排序的方向, true 为升序, false为降序

template <typename T>
void insertSortBS(T & arr[],const bool seq=true)
{
  if(typename(arr) == "int" || typename(arr) == "double")
  {
    int size = ArraySize(arr);
    int insertIndex = 0;
    if(seq)
    {
      for(int i = 1; i < size ; i++)
      {
        int left = 0;
        int right = i;
        int temp = arr[i];
        while(left < right)
        {
         int mid = left + ((right - left) >> 1);
         if(arr[mid] > temp) right = mid;
         else left = mid + 1;
        }
        for(int j = i; j > left; j--) arr[j] = arr[j - 1];
        arr[left] = temp;
      }
    }
    else
    {
      for(int i = 1; i < size ; i++)
      {
        int left = 0;
        int right = i;
        int temp = arr[i];
        while(left < right)
        {
         int mid = left + ((right - left) >> 1);
         if(arr[mid] < temp) right = mid;
         else left = mid + 1;
        }
        for(int j = i; j > left; j--) arr[j] = arr[j - 1];
        arr[left] = temp;
      }
    }
    
  }
  
}
 收藏 (0) 打赏

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

支付宝扫一扫赞助

微信钱包扫描赞助

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

评论 抢沙发

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

瓜皮猫量化交易编程

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

登录

忘记密码 ?

切换登录

注册

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