冒泡排序算法之详解

算法自古以来就有,引用:算法在中国古代文献中称为"术",最早出现在《周髀算经》、《九章算术》。特别在九章算术中给出了四则运算、最小公倍数、最大公约数、开平方根、开立方根、求素数的埃拉托斯特尼筛法,线性方程组求解的算法

到了现代算法在计算机科学领域更有着超然的地位,接下来我就说的是最基本且经常会用一种排序算法:冒泡排序算法。

冒泡排序是一种简单且稳定的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就交换过来,走访数列的工作时重复直达没有数需要交换。由于是这样的工作。所以这是在算法排序中最没有效率的。

冒泡排序的运作:

  1. 比较相邻的元素。如果第一个比第二个大,那么他们将交换位置。
  2. 对每个数执行相同的工作,由第一对直至到结尾的最后一对,完成这些最后一个元素会是最大的。
  3. 针对所有元素重复以上步骤,除了最后一个元素
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

2460467330.gif
11.png

在这图可以看出 A1 > A2 他们交换位置,执行下去直到遇到A4 ,比他大,所以接下来由A4继续剩下的工作,完成此次循环,再由A2循环工作,以此类推。。

直到没有需要交换的元素。

算法代码:

C:

#include <stdio.h>

int main()
{
    int a[] = { 12,234,23,34,321,43,542,34,4523,423,324 };
    int len, i, h, t;
    len = (int) sizeof(a) / sizeof(*a);
    for ( i = 0; i < len; i++)
    {
        for (h = 0; h < len; h++) { if (a[i] > a[h])
            {
                t = a[i];
                a[i] = a[h];
                a[h] = t;
            }
        }
    }

    for ( i = 0; i < len; i++)
    {
        printf("%d " ,a[i]);
    }
    return 0;
}