冒泡排序
思想:1.首先将所有待排序的数字放入工作列表中。2. 从列表的第一个数字到倒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将它与它的下一位交换。3. 重复2号步骤(倒数的数字加1。例如:第一次到倒数第二个数字,第二次到倒数第三个数字,依此类推...),直至再也不能交换。每次冒泡得到最大的数存在数组尾数上。
注:函数模板定义的一般形式
template <class 数据类型参数标示符>
函数返回值类型函数名(参数表)
{
函数体
}
例如: templat <class T1,class T2>
T1 fun(T1 a,T2 b)
{
T2=d;
}
如果主调函数中有: int x; double y;、、、、 fun(x,y);则系统将用实参x的数据类型int和y的数据类型double的代替函数模板中的T1和T2,生成模板函数 int fun(int a,double b) { double d;、、、、 }
程序:
template<classT>
voidBubbleSort(T *x,constintN)
{
for(intk= N-1; k>0 ;k--)
{
for(inti=0; i<k; i++)
{
if(x[i]> x[i+1])
{
Ttemp = x[i];
x[i]= x[i+1];
x[i+1]= temp;
}
}
}
}
分析:
稳定性:冒泡在两数相等的情况下不交换位置,所以是稳定的。
时间复杂度:最差时间复杂度 O(n²),最优时间复杂度 O(n),平均时间复杂度 O(n²)
辅助空间复杂度 :O(1)