用C++函数模板实现冒泡排序

         此程序为从小到大排序,这个程序比较精彩的部分就是加入了false,大致思路为:当一个数字比它后面的数字小时,不执行if(a[j]>a[j+1])语句。减少了执行次数。(直接把含有flag的语句注掉,编译也可以通过)。写程序时应该注意的是第6 、14 、 22行的 template <typename T> 不能丢!!!!!

#include<iostream>
#define MAXSIZE 100
#define FALSE 0
#define TURE 1
using namespace std;
template <typename T>
void swap(T a[],T i,T j)
{
	int tmp;
	tmp=a[j];
	a[j]=a[i];
	a[i]=tmp;	
}
template <typename T>
void print(T a[], T len)
{
	int i;
	for(i=0;i<len;i++)
	cout<<a[i]<<"\t";
	cout<<endl;
}
template <typename T>     
void Bubble_sort(T a[],T len)
{
	int i,j;
	int flag=FALSE;  //FALSE代表序列依旧是乱序;
	for(i=1;i<=len-1&&flag==FALSE;i++)
	{
		flag=TURE;           //先假设flag为TURE
		for(j=0;j<=len-i-1;j++)
		{
			if(a[j]>a[j+1])     //如果是无序执行if语句
			{
				swap(a,j,j+1);
				flag=FALSE;   //执行后flag变为FALSE;
			}
		}
	}
}
int main()
{
	int len=0,tmp=0;
	int a[MAXSIZE]={0};   //初始化;
	char string[100]={0};
    cout<<"请输入任意个数的整数,以回车结束"<<endl;
    gets(string);
	char *str=string;  // 字符型数组
	while(*str!='\0')
	{
		while(*str!=' '&&*str!='\0')  //'1','0',' ','1','2' //*str取内容
		{
			a[len]=a[len]*10+*str-'0';  //取内容加*
			str++;                     //指针,取地址;
		}
		len++;
		while(*str==' ')
		str++;
	}
	cout<<endl;
	cout<<"排序前:";
	print(a,len);             //a为实际输入的长度;
	Bubble_sort(a,len);
	cout<<"排序后:";
	print(a,len);
	return 0;
}

运行结果示范:

猜你喜欢

转载自blog.csdn.net/mmmmmmyy/article/details/81346944
今日推荐