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;
}

测试结果:

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

相关文章

  • Qt多版本共存使用实现组件增删

    Qt多版本共存使用实现组件增删

    本文主要介绍了Qt多版本共存使用实现组件增删,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • C语言数据结构顺序表中的增删改(头插头删)教程示例详解

    C语言数据结构顺序表中的增删改(头插头删)教程示例详解

    这篇文章主要为大家介绍了C语言数据结构顺序表中增删改关于头插头删的教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • C++  系统IO流介绍

    C++  系统IO流介绍

    这篇文章主要介绍了C++系统IO流,大部分人都是从输出"Hello World"开始的,本文会介绍C++中的IO细节,需要的朋友可以参考一下,希望对大家有所帮助
    2021-12-12
  • C语言之栈和堆(Stack && Heap)的优缺点及其使用区别

    C语言之栈和堆(Stack && Heap)的优缺点及其使用区别

    本篇文章主要介绍了什么是栈(Stack) 、什么是堆( Heap),以及栈和堆的优缺点,同时介绍了应该什么时候使用堆和栈,有需要的朋友可以参考下
    2015-07-07
  • C++11中longlong超长整型和nullptr初始化空指针

    C++11中longlong超长整型和nullptr初始化空指针

    本文介绍 C++11 标准中新添加的 long long 超长整型和 nullptr 初始化空指针,在 C++11 标准下,相比 NULL 和 0,使用 nullptr 初始化空指针可以令我们编写的程序更加健壮,本文结合示例代码给大家详细讲解,需要的朋友跟随小编一起看看吧
    2022-12-12
  • c++基础语法:构造函数与析构函数

    c++基础语法:构造函数与析构函数

    构造函数用来构造一个对象,主要完成一些初始化工作,如果类中不提供构造函数,编译器会默认的提供一个默认构造函数(参数为空的构造函数就是默认构造函数) ;析构函数是隐式调用的,delete对象时候会自动调用完成对象的清理工作
    2013-09-09
  • 深入理解C语言中编译相关的常见错误

    深入理解C语言中编译相关的常见错误

    本篇文章是对C语言中编译相关的常见错误进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言中函数声明与调用问题

    C语言中函数声明与调用问题

    以下是对C语言中的函数声明与调用进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • C语言中数据如何存储进内存揭秘

    C语言中数据如何存储进内存揭秘

    使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。您可能需要存储各种数据类型的信息,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么
    2022-08-08
  • C++实现LeetCode(128.求最长连续序列)

    C++实现LeetCode(128.求最长连续序列)

    这篇文章主要介绍了C++实现LeetCode(128.求最长连续序列),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07

最新评论