时间复杂度都为O(n2),改良的冒泡算法,简单选择排序算法和插入算法
//改良的冒泡排序
template<class T>
void BubbleSort(T* pArr,int length)
{
if(!pArr)
return;
int i,j;
bool flag =true;
for (i=0;i<length&&flag;i++)
{
flag=false;
//由后往前比较
for (j=length-2;j>=i;j--)
{
if(pArr[j]>pArr[j+1])
{
T temp = pArr[j];
pArr[j]=pArr[j+1];
pArr[j+1]=temp;
}
//数据有交换,哨兵
flag =true;
}
}
}
//简单选择排序
template<class T>
void SelsectSort(T* pArr,int length)
{
if(!pArr)
return;
int i,j,min;
for (i=0;i<length;i++)
{
min =i;
//选出值最小的下标,默认为i
for (j=i+1;j<length;j++)
if(pArr[i]>pArr[j])
min = j;
//有变化进行交换
if(min !=i)
{
T temp = pArr[min];
pArr[min]=pArr[i];
pArr[i]=temp;
}
}
}
//插入排序
template<class T>
void InsertSort(T* pArr,int length)
{
if(!pArr)
return;
int i,j;
//以第一个为基准
for (i=1;i<length;i++)
if(pArr[i] < pArr[i-1])
{
//保存要插入的元素
T temp = pArr[i];
//要移动的元素前面的元素依次后移,空出一个位置
for (j=i-1;pArr[j]>temp&&j>=0;j--)
pArr[j+1]=pArr[j];
//原来I位置的元素插入位置是j+1
pArr[j+1] = temp;
}
}