插入排序算法,c++ 模板技术表述,完全兼容标准库容器!!!

插入排序算法,c++ 模板技术表述,完全兼容标准库容器!!!

这里用到c++ STL中traits机制。

为了清晰的表述,用两个文件。

贴代码!!!


#pragma once 
#include<iterator> // std::iterator_traits



namespace mystd{
	//此函数可以很好地与标准库兼容
	//升序排列
template<class random_access_iterator> // 随机访问迭代器
	void insert_sort(random_access_iterator first,random_access_iterator last)
	{  //利用traits机制
		typedef typename std::iterator_traits<random_access_iterator>::value_type value_type;
		std::size_t n = last - first;
		if(n == 0 || n == 1) return ;
		random_access_iterator left = first;
		while(++left != last)
		{
			if(*(left - 1) <= *left)
				continue;
			else
			{
				value_type temp_val = *left;
				random_access_iterator ptr = left;
				while(ptr != first) //回溯查找合适的位置
				{
					if(*(ptr - 1) <= temp_val) //表明已经找到,退出循环
						break;
					else
					{
						*ptr = *(ptr - 1);
						ptr--; //继续回溯
					}
				}
				*ptr = temp_val; //将保存的值放到正确的位置
			}
		}
	}

} // end of namespace mystd 


下面是一个简单的测试程序!上面的头文件命名为"test.h"


#include<iostream>
#include"test.h"
#include<vector>
#include<cstdlib> // rand() 


using std::cout;
using std::endl;

int main()
{
	const int mn = 10;
	std::vector<int> my;
	for(int i = 0; i < mn; ++i)
		my.push_back(rand() % 10000); //利用随机数


	cout<<"不排序的情况:"<<endl;
	for(int i = 0; i < mn; ++i)
		cout<<my[i]<<"\t";
	cout<<endl;


	cout<<"排序的情况:"<<endl;
	//传入迭代器
	mystd::insert_sort(my.begin(),my.end());
	for(int i = 0; i < mn; ++i)
		cout<<my[i]<<"\t";
	cout<<endl;

	system("pause");
	return 0;
}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值