1. 程式人生 > >用C++函式模板實現氣泡排序

用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;
}

執行結果示範: