C++实现折半插入排序(BinaryInsertSort)

 更新时间:2020年04月26日 08:47:58   作者:ChanJose  
这篇文章主要为大家详细介绍了C++实现折半插入排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C++实现折半插入排序的具体代码,供大家参考,具体内容如下

一、思路:

较插入排序,减少了比较的次数,但是插入时间还是一样。

(1)按二分查找的方法,查找V[i]在V[0],V[1]…V[i-1]中插入的位置;

(2)将插入位置的元素向后顺移。

二、实现程序:

// 二分插入:较插入排序,减少了比较的次数,但是插入时间还是一样
// 时间复杂度还是:O(n*n)
#include <iostream>
using namespace std;
 
const int maxSize = 20;
 
template <class T>
void BinInsertSort(T arr[], const int left, const int right) {
 int i, j, low, high, mid;
 T temp;
 
 for(i = left+1; i <= right; i++) {
  temp = arr[i]; // 暂存arr[i]
  low = left;
  high = i-1; // low、high作为折半查找的上、下界
  while(low <= high) { // 用折半查找的方法,查找arr[i]的插入位置
   mid = (low + high) / 2;
   if(temp < arr[mid])
    high = mid - 1;
   else
    low = mid + 1;
  } // while
  for(j = i-1; j >= low; j--)
   arr[j+1] = arr[j]; // 顺序后移
  arr[low] = temp; // 回填
 } // for
} // BinInsertSort
 
int main(int argc, const char * argv[]) {
 int i, n, arr[maxSize];
 
 cout << "请输入要排序的数的个数:";
 cin >> n;
 cout << "请输入要排序的数:";
 for(i = 0; i < n; i++)
  cin >> arr[i];
 cout << "排序前:" << endl;
 for(i = 0; i < n; i++)
  cout << arr[i] << " ";
 cout << endl;
 BinInsertSort(arr, 0, n-1);
 cout << "排序后:" << endl;
 for(i = 0; i < n; i++)
  cout << arr[i] << " ";
 cout << endl;
 return 0;
}

测试结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C语言数据结构堆的基本操作实现

    C语言数据结构堆的基本操作实现

    这篇文章主要为大家介绍了C语言数据结构堆的基本操作实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-11-11
  • 详解c/c++链式堆栈描述进制转换问题示例

    详解c/c++链式堆栈描述进制转换问题示例

    这篇文章主要为大家介绍了c/c++链式堆栈描述进制转换问题示例解析有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • C++ Qt开发之关联容器类使用方法详解

    C++ Qt开发之关联容器类使用方法详解

    当我们谈论编程中的数据结构时,顺序容器是不可忽视的一个重要概念,Qt 中提供了丰富的容器类,用于方便地管理和操作数据,本章我们将主要学习关联容器,主要包括 QMap ,QSet和 QHash,感兴趣的朋友跟着小编一起来学习吧
    2023-12-12
  • C语言实现餐饮管理系统

    C语言实现餐饮管理系统

    这篇文章主要为大家详细介绍了C语言实现餐饮管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 浅谈C++中char型变量的地址输出

    浅谈C++中char型变量的地址输出

    下面小编就为大家带来一篇浅谈C++中char 型变量的地址输出。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Dijkstra算法与Prim算法的异同案例详解

    Dijkstra算法与Prim算法的异同案例详解

    这篇文章主要介绍了Dijkstra算法与Prim算法的异同案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • 深入理解C语言内存对齐

    深入理解C语言内存对齐

    这篇文章主要介绍了C语言内存对齐,有需要的朋友可以参考一下
    2013-12-12
  • C++中的Z字形变换问题

    C++中的Z字形变换问题

    将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列,这样一个需求怎么实现呢,下面小编给大家带来了C++中的Z字形变换问题,需要的朋友可以参考下
    2022-07-07
  • C语言实现时区转换函数的实例

    C语言实现时区转换函数的实例

    这篇文章主要介绍了C语言实现时区转换函数的实例的相关资料,这里分析需求并提供实现代码,需要的朋友可以参考下
    2017-08-08
  • C++超详细讲解构造函数与析构函数的用法及实现

    C++超详细讲解构造函数与析构函数的用法及实现

    构造函数主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用;析构函数主要作用在于对象销毁前系统自动调用,执行一 些清理工作
    2022-05-05

最新评论