一点一点学算法--直接插入和排序

本文分享了非计算机专业的作者重新学习算法的过程,重点介绍了冒泡排序和直接插入排序的C++实现,并附上了代码及遇到的问题。

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

上次算法问题回答不上来后,很受打击,于是决定重新学习算法,本人不是计算机专业,但是还要把算法给啃起来,这两天慢慢的在看一些算法,也会将练习的一些程序发出来,平时都是在linux下写代码,现在用vs2010上练习。附上代码:其它不表。在最下面有工程打包文件。添加冒泡法模板时编译报错,也请各路大神给予指点。报错信息为:

>d:\c++workspace\算法学习\算法学习\bubbsort.h(52): error C2904: “CBubbSortTestL”: 名称已经用于当前范围内的模板
1>          d:\c++workspace\算法学习\算法学习\bubbsort.h(14) : 参见“CBubbSortTestL”的声明
1>d:\c++workspace\算法学习\算法学习\main.cpp(41): error C2146: 语法错误: 缺少“;”(在标识符“cBubbSort”的前面)
1>d:\c++workspace\算法学习\算法学习\main.cpp(41): warning C4551: 缺少参数列表的函数调用
1>d:\c++workspace\算法学习\算法学习\main.cpp(41): error C2065: “cBubbSort”: 未声明的标识符
1>d:\c++workspace\算法学习\算法学习\main.cpp(42): error C2065: “cBubbSort”: 未声明的标识符
1>d:\c++workspace\算法学习\算法学习\main.cpp(42): error C2228: “.BubbSort”的左边必须有类/结构/联合
1>          类型是“'unknown-type'”
1>

冒泡排序算法模板为:

#ifndef __BUBBSORT_H__
#define __BUBBSORT_H__
/*
*
*
*冒泡排序算法
*
*
*
*/

template <typename T>
class CBubbSortTestL
{
public:
	CBubbSortTestL(){};
	~CBubbSortTestL(){};
public:
	void Swap(T *p1,T *p2);
	// 0是升序 1是降序
	int BubbSort(T Array[],int iSize);
};

template<class T>
void CBubbSortTestL<T>::Swap(T *p1,T *p2)
{
	T tTmp;
	tTmp = *p1;
	*p1 = *p2;
	*p2  = tTmp;
};
template<class T>
int CBubbSortTestL<T>::BubbSort(T Array[],int iSize)
{
	/*if(0 != iSortType && 1 != iSortType)
	{
	return -1;
	}
	*/
	int i = 0,j=0;
	for ( i = iSize-1;i>1;i--)
	{
		for(j=0;j<i;j++)
		{
			if(Array[j]<Array[j+1])
			{
				Swap(&Array[j],&Array[j+1]);
			}
		}
	}
	return 0;
};
#endif


 

直接插入排序模板为:

#ifndef __DIRECT_INSERT_SORT_H__
#define __DIRECT_INSERT_SORT_H__
/*
*
*
*直接插入排序
*
*
*
*/
template <class T>
class CDirectInsertSort
{
public:
	CDirectInsertSort(){};
	~CDirectInsertSort(){};
public:
	void Swap(T *p1,T *p2);
	// 0是升序 1是降序
	int DirectInsertSort(T Array[],int iSize,int iSortType=0);
};

template<class T>
void CDirectInsertSort<T>::Swap(T *p1,T *p2)
{
	T tTmp;
	tTmp = *p1;
	*p1 = *p2;
	*p2  = tTmp;
}

template<class T>
int CDirectInsertSort<T>::DirectInsertSort(T Array[],int iSize,int iSortType)
{
	if(0 != iSortType && 1 != iSortType)
	{
		return -1;
	}
	if(0 ==iSortType)
	{
		for(int i = 0;i<iSize-1;i++)
		{
			for(int j=i+1;j>=1;j--)
			{
				if(Array[j]<=Array[j-1])
				{
					Swap(&Array[j],&Array[j-1]);
				}
			}
		}
	}
	else if(1 == iSortType)
	{
		for(int i = 0;i<iSize;i++)
		{
			for(int j=i+1;j>=1;j--)
			{
				if(Array[j]>=Array[j-1])
				{
					Swap(&Array[j],&Array[j-1]);
				}
			}
		}
	}
	return 0;
}
#endif

运行截图1:

不知道怎么上传附件,有知道的请指点。谢谢

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值