折半插入排序

本文介绍了一种改进的插入排序算法——折半插入排序,并通过C++代码实现了该算法。通过对10万个整数进行排序并记录运行时间,验证了算法的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/************************************************************************/
/*Binary Insert Sort                                                          */
/************************************************************************/

#include <iostream>
#include <time.h>
#include "Timer.h"
using namespace std;

#define Swap(x, y) {int temp = x; x = y; y = temp;}

const int MAX = 100000;

void Input(int* numbers)
{
	srand((unsigned)time(NULL));

	for (int i = 0; i < MAX; i++)
	{
		numbers[i] = rand() % (MAX * 10);
	}
}

void Output(int* numbers)
{
	for (int i = 1; i <= MAX; i++)		
	{
		cout << numbers[i-1] << " ";

		if (0 == i % 10)
		{
			cout << endl;
		}
	}

	cout << endl;
}

//折半插入排序
void BiInsertSort(int* numbers, int low, int high)
{
	for (int i = 1; i < high; i++)
	{
		int temp = numbers[i];
		int l = low;
		int h = i;

		while (l <= h)
		{
			int mid = (l + h) / 2;

			if (temp > numbers[mid])
			{
				l = mid + 1;
			}
			else
			{
				h = mid - 1;
			}
		}

		//Move datas
		for (int j = i; j > l; j--)
		{
			numbers[j] = numbers[j-1];
		}

		numbers[l] = temp;
	}
}

void main()
{
	//int num[MAX];
	int* num = new int[MAX];
	Input(num);

	cout << "Bubble before: " << endl;
	//Output(num);
	
	
	Timer timer;
	BiInsertSort(num, 0, MAX);
	cout <<"\nTime Elapsed: " << timer.GetElapsedTime() << "s" << endl;


	cout << "\nBubble after: " << endl;
	//Output(num);

	delete[] num;
}


测试数据:10万个int数据。

运行结果如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值