# 排序（三）

xiaoxiao2021-02-28  66

思想：

通过一系列交换逆序元素进行排序的方法。

（1）冒泡排序

***思想

每次扫描顺次比较相邻的两个元素的大小，若逆序就交换位置，反复扫描，直到待排序记录序列没有逆序为止。

***算法

void BubbleSort(RecordType r[],int n)

{

int i,j;

RecordType x;

for(i = 1 ; i<=n-1 ; i++)

{

for(j = 1 ; j<=n-i ; j++)

{

if(r[j].key>r[j+1].key)

{

x = r[j];

r[j] = r[j+1];

r[j+1] = x;

}

}

}

}

***案例

#include<stdio.h>                    #include<stdlib.h>                    typedef int KeyType;                    typedef int OtherType;                    typedef struct _RecordType                    {                 KeyType key;                 OtherType other_data;                    }RecordType;                    void BubbleSort(RecordType r[],int n)                    {                 int i,j;                 RecordType x;                 for(i = 1;i<=n-1;i++)                 {                  for(j = 1;j<=n-i;j++)             {             if(r[j].key>r[j+1].key)             {                  x = r[j];             r[j] = r[j+1];             r[j+1] = x;             }             }                 }                    }                    int main()                    {                 int i;                 int len;                 RecordType r[20];                 printf("请输入数组的长度:\n");                 scanf("%d",&len);                 for(i = 1;i<=len;i++)                 {             printf("请输入数组中第%d个元素   ",i);             scanf("%d",&r[i].key);                 }                 printf("\n");                 printf("排序前的结果:\n");                 for(i = 1;i<=len;i++)                 {             printf("%d  ",r[i].key);                 }                 printf("\n");                 BubbleSort(r,len);                 printf("排序后的结果:\n");                 for(i = 1;i<=len;i++)                 {             printf("%d  ",r[i].key);                 }                 printf("\n");                 return 0;                    }