排序算法:插入排序

插入排序的算法思想为:从第二个元素开始,与它之前的元素比较,如果当前元素大于参与比较的元素,则交换两个元素的位置,另外一种表述为在当前元素之前通过搜索的方法,找到第一个比它小的元素m,将当前元素插入到m后面,搜索的方法可以采用二分法。


C++实现代码

#include <iostream>
#include <vector>

using namespace std;

template<typename T>
void InsertionSort(vector<T> &vec);

int main()
{
	int arr[10] = { 8, 3, 10, 49, 2, 6, 13, 5, 14, 7 };
	vector<int> vec(&arr[0], &arr[10]);
	InsertionSort(vec);

	return 0;
}

// Insertion Sort with double partition search algorithm
template<typename T>
void InsertionSort(vector<T> &vec)
{
	int VSize = vec.size();

	if (VSize < 1)
		return;

	if (1 == VSize)
	{
		cout << "Only one element in array: " << vec[0] << endl;
		return;
	}

	for (int vIdx = 1; vIdx < VSize; vIdx++)
	{
		bool inserted = false;
		int left = 0;
		int right = vIdx - 1;
		int gIdx = 0;                  // the insert goal index

		if (vec[vIdx] > vec[vIdx - 1])
			continue;

		if (vec[vIdx] < vec[0])
			gIdx = 0;
		else
		{
			while (!inserted)
			{
				if (1 == right - left)
				{
					gIdx = right;
					inserted = true;
				}
				else
				{
					if (vec[vIdx] > vec[(left + right) / 2])
						left = (left + right) / 2;
					else
						right = (left + right) / 2;
				}
			}
		}

		for (int tIdx = vIdx - 1; tIdx >= gIdx; tIdx--)
		{
			vec[tIdx] ^= vec[tIdx + 1];
			vec[tIdx + 1] ^= vec[tIdx];
			vec[tIdx] ^= vec[tIdx + 1];
		}

	}

	for (int vIdx = 0; vIdx < VSize; vIdx++)
	{
		cout << "index " << vIdx << " value " << vec[vIdx] << endl;
	}

	return;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值