算法才是计算机的灵魂。今天我们就来讲解一下算法。
交换排序,就是比较两个记录的键值大小,逆序则交换两个记录的位置。这样键值小的记录向前移动,键值大的记录向序列后部移动。今天,我们来讲解一下冒泡排序。
冒泡排序,因每趟都有一个最大键值的记录沉到序列底部,与气泡从水中往上冒类似而得名。
冒泡排序的算法如下:
冒泡排序是一种稳定的排序,时间复杂度在最坏情况和平均情况下都是O(N2),最好情况是O(N)。
交换排序,就是比较两个记录的键值大小,逆序则交换两个记录的位置。这样键值小的记录向前移动,键值大的记录向序列后部移动。今天,我们来讲解一下冒泡排序。
冒泡排序,因每趟都有一个最大键值的记录沉到序列底部,与气泡从水中往上冒类似而得名。
我们先来看一下冒泡排序的基本过程:
初始键值序列 45 38 66 90 88 10 25 45
第一趟排序后 38 45 66 88 10 25 45 90
第二趟排序后 38 45 66 10 25 45 88 90
第三趟排序后 38 45 10 25 45 66 88 90
第四趟排序后 38 10 25 45 45 66 88 90
第五趟排序后 10 25 38 45 45 66 88 90
第六趟排序后 10 25 38 45 45 66 88 90
第七趟排序后 10 25 38 45 45 66 88 90
冒泡排序的算法如下:
void BubbleSort (List R,int n){
int i,j,temp,endsort;
for(i=1;i<=n-1;i++) //n为序列中记录的个数,循环控制排序的趟数为n-1
{
endsort=0; //每次排序前置endsort为0,排序中进行了交换则置为1,循环结束时检查endsort为0则终止循环
for(i=1;j<=n-j;j++) //循环控制每趟比较的次数,第j趟比较n-j次
{ if(R[j].key>R[j+1].key) //比较相邻元素,若逆序则交换
{ temp=R[j];
R[j]=R[j+1];
R[j+1]=temp;
endsort=1;
}
}
if(endsort==0) break;
}
}
冒泡排序是一种稳定的排序,时间复杂度在最坏情况和平均情况下都是O(N2),最好情况是O(N)。