数据结构 冒泡排序

Ⅰ )算法思想

        冒泡排序是一种相对简单并且容易理解、容易实现的一种排序算法。其基本思想是:依次比较相邻的两个数,若想相邻的两个数逆序,则交换位置。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后(升序排列)。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。
     然后进行第二次趟冒泡排序,对前n-1个记录进行同样的操作,其结果是使次大的记录放在第n-1个记录的位置上。
     然后进行第三次趟冒泡排序,对前n-2个记录进行同样的操作,其结果是使第三大的记录放在第n-2 个记录的位置上。
     如此反复,每一趟冒泡排序都将一个记录排到位,直到剩下一个最小的记录。
     若在某一趟的冒泡排序过程中,没有发现一个逆序,则可直接结束整个排序过程,所以冒泡排序最多进行n-1 趟比较。

Ⅱ)源代码


//冒泡排序
 
#include<stdio.h>
#define MaxSize 50
 
typedef struct
{
    int key;
}RecordType;       //记录方式
 
typedef struct
{
    int length;
    RecordType r[MaxSize+1];    //记录表
}RecordList;
 
void BubbleSort(RecordList *l,int length//冒泡排序
{
    int x;             //定义中间变量
    for (int i = 0; i <=l->length - 1; i++)
    {
        for (int j = 0; j <=l->length - 1 - i; j++) //由于定义了一个RecordList *l,所以使用->表所属
        {
            if (l->r[j].key >l->r[j + 1].key)
            {
               x = l->r[j].key;                    //交换顺序
                l->r[j].key = l->r[j + 1].key;
                l->r[j + 1].key = x;
            }
        }
    }
}
 
 
int main(void)
{
    RecordList l = {  10, 0, 4,5, 1, 9, 6, 8, 0, 3, 7, 2 };
    BubbleSort(&l, 10);
    for (int i = 1; i <= 10; i++)           //循环输出结果
    {
        printf("%d\t", l.r[i].key);       
    }
    printf("\n");
    return 0;
}
 



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值