#include "stdafx.h"
#include <iostream>
using namespace std;
///@brief 二分法插入排序
///@param[in][out] data[] 需要被排序的数组
///@param[in] n 数组的长度
///@param[in] 指定排序方式(升序(0)/降序(1))
void InsertSort(int data[],int n,int flag)
{
int key,left,middle,right;
for (int j=1;j<n;j++)
{
key=data[j];
left=0;
right=j-1;
// 二分法寻找插入位置
while (left<=right)
{
middle=(left+right)/2;
switch (flag)
{
case 0: //升序
if (key<data[middle])
{
right=middle-1;
}
else
{
left=middle+1;
}
break;
case 1: //降序
if (key>data[middle])
{
right=middle-1;
}
else
{
left=middle+1;
}
break;
default:
break;
}
}
// 数据右移
for (int i=j;i>left;i--)
{
data[i]=data[i-1];
}
// 插入数据
data[left]=key;
}
}
int _tmain(int argc, _TCHAR* argv
插入排序-二分法-C++实现
最新推荐文章于 2023-02-02 17:20:03 发布
本文介绍了如何使用C++实现插入排序,并结合二分法进行优化。程序分别展示了升序和降序排列的例子。算法分析表明,该排序方法在稳定性和空间复杂度上表现出色,但在最坏和平均情况下时间复杂度为Θ(n^2),而在最佳情况下达到Θ(nlog n)。
摘要由CSDN通过智能技术生成