基本思想:每趟将记录两两比较,并按前小后大规则交换
对n个元素,需要n-1趟排序,第i趟需要比较n-i次
冒泡排序是稳定的排序。
当某一趟比较没有出现交换时,说明已经排好序了就可以结束本算法,由此可以提高效率。
时间复杂度:
平均时间复杂度:O()
最好情况(正序):
比较次数:n-1 移动次数:0
最坏情况(逆序):
比较次数:(-n) 移动次数:(-n)
void bubble_sort(SqList &L){
int m,j;
ElemType temp;
for(m=0;m<n-1;m++){
for(j=0;j<n-m-1;j++){
if(L.r[j].key>L.r[j+1].key){
temp=L.r[j];
L.r[j]=L.r[j+1];
L.r[j+1]=temp;
}
}
}
}
//改进,增加一个标记
void bubble_sort(SqList &L){
int m,j,flag=1;
ElemType temp;
for(m=0;m<n-1&&flag==1;m++){
flag=0;
for(j=0;j<n-m-1;j++){
if(L.r[j].key>L.r[j+1].key){
flag=1;
temp=L.r[j];
L.r[j]=L.r[j+1];
L.r[j+1]=temp;
}
}
}
}