冒泡排序有三种写法,第一种严格意义上来说不是冒泡排序,只是简单的交换排序,效率低下,此处不说,只介绍第二和三种。
1.基本冒泡排序
//对表L做冒泡排序
void BubbleSort(SqList *L)
{
int i, j;
for(i=1;i < L->length;i++){
for(j=L->length-1;j >= i;j--){ //注意j是从后往前循环
if(L->r[j] > L->r[j+1]){
swap(L,j,j+1);
}
}
}
}
2.冒泡排序优化
若在循环结束之前记录已经有序,则剩下的循环就是浪费资源,因此对冒泡进行改进,加入一个标志来判断。
#include <stdbool.h>
void BubbleSort_opt(SqList *L)
{
int i,j;
bool flag=true;
for(i=1;i < L->length && flag;i++){
flag=false;
for(j=L->length-1;j >= i;j--){
if(L->r[j] > L->r[j+1]){
swap(L,j,j+1);
flag=true;
}
}
}
}