此程序为从小到大排序,这个程序比较精彩的部分就是加入了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;
}
运行结果示范: