0
点赞
收藏
分享

微信扫一扫

经典排序算法——冒泡排序

经典排序算法——冒泡排序

1 冒泡排序的实现

冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,指导没有反序的记录为止。

冒泡排序算法:,

void BubbliSort(SqList *L){
int i,j;
Status flag= TRUE;
for (i=1;i<L->length && flag;i++){ // 如果flag发生数据交换,则退出循环
flag = FALSE;
for(j=L->length-1;j>=i;j--){ // j从后往前循环
if(L->r[j]>L->r[j+1]){ // 若前者大于后者
swap(L,j,j+1); // 交换L->r[j]与L->r[j+1]的值
flag = TRUE; // 如果有数据交换,则flag为TRUE
}
}
}

/* 交换L中数组r的下标为i和j的值 */
void swap(SqList *L,int i,int j)
{
int temp=L->r[i];
L->r[i]=L->r[j];
L->r[j]=temp;
}

2 冒泡排序的算法步骤

  1. 设待排序的记录存在在数组r[1····n]中,首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序​​(L->r[j]>L->r[j+1])​​,则交换两个记录。然后比较第二个记录和第三个记录的关键字。依次类推,直到第n-1个记录和第n个记录的关键字进行过比较为止,上述过程称为冒泡排序的第一个趟,其结果是使得关键字最大的记录被安置到最后一个记录的位置上。
  2. 然后进行第二趟冒泡排序,对前n-1个记录进行同样操作,其结果是使关键字次大的记录被安置到第n-1个记录的位置上。
  3. 重复上述比较和交换过程,第i趟是从​​L-r[1]​​​到​​L->r[L->length-i+1]​​​依次比较相邻两个记录的关键字,并在“逆序”时交换相邻记录,其结果是这​​L->length-i+1​​​个记录中关键字最大的记录被交换到第​​L->length-i+1​​的位置上。指导在某一趟排序过程中没有进行过交换记录的操作,说明序列已全部达到排序要求,则完成排序。

若待排序记录的关键字序列为​​{49,38,65,97,76,13,27,49}​​,请给出用冒泡排序法进行排序的过程。

经典排序算法——冒泡排序_待排序

时间复杂度:,总的时间复杂度

举报

相关推荐

0 条评论