C/C++ 冒泡排序法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/afei__/article/details/82945047

一、原理简介

冒泡排序的原理即是,对于一个元素个数为 n 的无序集合,从第一个元素开始依次和下一个元素比较,较大者放在后面的位置,最终可以得到一个最大值并放置在最后一个位置。接下来再遍历 0 至 n-1 个元素,找到第二大的数放置在 n-1 的位置,反复如此完成排序。

 

二、时间复杂度

冒泡排序的时间复杂度为 O(n^2)。

第一次需要检查n个元素,但随后检查的元素数依次为n - 1, n – 2, …, 2和1。平均每次检查的元素数为1/2 n, 因此运行时间为 n 1/2 * n,简单地写作 O(n^2)。

 

三、代码实现

#include <stdio.h>

void swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

void bubbleSort(int *array, int length)
{
    for (int i = 0; i < length; i++)
    {
        for (int j = 0; j < length - i - 1; j++)
        {
            if (array[j] > array[j + 1])
            {
                swap(&array[j], &array[j + 1]);
            }
        }
    }
}

void printArray(int *array, int length)
{
    for (size_t i = 0; i < length; i++)
    {
        printf("%d ", array[i]);
    }
}

int main()
{
    int arr[] = { 3, 1, 2, 5, 2, 5, 6, 9, 5, 2, 5, 6 };
    bubbleSort(arr, sizeof(arr) / sizeof(arr[0]));
    printArray(arr, sizeof(arr) / sizeof(arr[0]));
    return 0;
}

执行结果为:

1 2 2 2 3 5 5 5 5 6 6 9 

猜你喜欢

转载自blog.csdn.net/afei__/article/details/82945047