排序算法之----冒泡排序

#include <stdio.h>
#include <stdlib.h>

//冒泡排序非正式版
//默认从小到大排序
//时间复杂度:n+n-1+n-2+......+1 即(n+1)n/2,O(n^2)
void BublbleSort1(int k[], int n)
{
    int i, j, tmp;
    for (i = 0; i < n - 1; i++)
    {
        for (j = i + 1; j < n; j++)
        {
            if (k[i] > k[j])
            {
                tmp  = k[i];
                k[i] = k[j];
                k[j] = tmp;
            }
        }
    }
}

//冒泡排序正式版
//基本思想:两两相邻记录的关键字,如果反序则交换,直到没有反序为止
//最坏情况和BublbleSort1执行次数相同,对于特殊的序列,效率大大提升
void BublbleSort2(int k[], int n)
{
    int i, j, tmp;
    bool  flag = true;
    for (i = 0; ((i < n - 1 )&& flag); i++)
    {
        flag = false;
        for (j = n-1; j > i; j--)
        {            
            if (k[j-1] > k[j])
            {
                tmp = k[j-1];
                k[j-1] = k[j];
                k[j] = tmp;
                flag = true;
            }
        }
    }
}

void print(int a[], int num)
{
    int i = 0;
    for (i = 0; i < num; i++)
    {
        printf("%d ", a[i]);
    }
    printf("
");
}

int main()
{
    int a[10] = { 2, 3, 56, 1, 4, 7, 8, 94, 3, 10 };
    BublbleSort2(a, 10);
    print(a, 10);
    return system("pause");
}
原文地址:https://www.cnblogs.com/henkk/p/11205890.html