冒泡排序 C++实现

冒泡排序


算法思想:自下往上依次比较取最小。
基本思想:交换排序:两两比较待排序记录的关键字,发现两个纪录的次序相反时即进行交换,直到没有反序的记录为止。
算法执行:自下向上扫描,依次比较相邻两个气泡的重量,若轻者在下,重者在上,则置换两者位置,使其向上漂浮。一次扫描结束后,最轻的气泡便漂浮在该区间的最顶部,这时只有顶部一个位置是有序的。二次扫描,将次轻的气泡向上漂浮至有序区间下面的位置。如是往复,直至所有位置都是有序的。对于n个元素的文件来说,顶多扫描n-1趟,若某一趟扫描中,没有发生任何位置交换,则证明文件已经有序,可提前终止算法。
算法性能:记录移动次数较多,故平均时间性能比直接插入排序差得多。
算法稳定性:稳定排序。
代码实现:

1

void BubbleSort(SeqList R, int n)

2

{

3

    // R[1..n]是待排序文件,采用自下向上扫描,对R做冒泡排序

4

    int i,j;

5

    bool exchange;

6

    for(int i=1; i<n; i+++)  // 最多做n-1趟排序

7

    { 

8

        exchange=false;      // 置换标志,本趟未扫描前,置为false;

9

        for(j=n-1; j>=i; j--)   // 自下向上扫描

10

        {

11

            if(R[j].key<R[j-1].key)   // 位置置换

12

            {

13

                R[0]=R[j-1];

14

                R[j-1]=R[j];

15

                R[j]=R[0];

16

                exchange=true;   // 若发生了位置置换,置标志为true;

17

            }

18

        }

19

        if(!exchange)    // 若本趟排序未发生位置置换,提前终止算法

20

            return;

21

    }

22

}

23

            
点赞