冒泡排序 C++实现

来源:互联网 发布:知乎扒皮密子君催吐 编辑:程序博客网 时间:2024/06/05 07:45
冒泡排序

算法思想:自下往上依次比较取最小。
基本思想:交换排序:两两比较待排序记录的关键字,发现两个纪录的次序相反时即进行交换,直到没有反序的记录为止。
算法执行:自下向上扫描,依次比较相邻两个气泡的重量,若轻者在下,重者在上,则置换两者位置,使其向上漂浮。一次扫描结束后,最轻的气泡便漂浮在该区间的最顶部,这时只有顶部一个位置是有序的。二次扫描,将次轻的气泡向上漂浮至有序区间下面的位置。如是往复,直至所有位置都是有序的。对于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