数据结构 冒泡排序

来源:互联网 发布:怎样修改淘宝评价内容 编辑:程序博客网 时间:2024/06/01 10:16

Ⅰ )算法思想

        冒泡排序是一种相对简单并且容易理解、容易实现的一种排序算法。其基本思想是:依次比较相邻的两个数,若想相邻的两个数逆序,则交换位置。即在第一趟:首先比较第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];    //记录表}RecordListvoid 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;} 

原创粉丝点击