冒泡排序原理 (1)将整个待排序的记录序列划分成有序区和无序区。初始状态有序区为空,无序区 包括所有待排序的记录。 (2)对无序区从前向后依次将相邻记录的关键字进行比较,若逆序则将其交换,从而 使得关键字值小的记录向上“飘”(左移),关键字值大的记录向下“沉”(右移)。 每经过一趟冒泡排序,都使无序区中关键字值大的记录进入有序区,对于由 n 个记录组 成的记录序列,多经过 n-1 趟冒泡排序,就可以将这 n 个记录重新按关键字顺序排列。
代码模板 对由 n 个记录组成的记录序列,多经过(n-1)趟冒泡排序,就可以使记录序列成为 有序序列,第一趟定位第 n 个记录,此时有序区只有一个记录;第二趟定位第 n-1 个记 录,此时有序区有两个记录;以此类推,直到后所有的记录都进入有序区,排序结束。 完整的冒泡排序算法如下。
void BubbleSort1(int r[], int n)
{
int i,j;
int temp;
for (i=n-1;i>0;i--) /*i为每趟排序的数组大下标值*/
for (j=0;j<=i-1;j++) /*一趟交换排序*/
if(r[j].Key>r[j+1].Key) /*若逆序*/
{
temp=r[j];
r[j]=r[j+1];
r[j+1]=temp;
}
}