数据结构-冒泡排序算法

1、冒泡排序

冒泡排序之所以叫冒泡排序,是因为它每一种元素都像小气泡一样根据自身大小一点一点往数组的一侧移动。

基本思想是假如需要排序的数组元素有n个,则进行n-1轮比较,第K轮比较中元素的比较次数为n-k次,算法的复杂度准确界为O(n2)

算法步骤如下:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个;

  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数;

  3. 针对所有的元素重复以上的步骤,除了最后一个;

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

#include <stdio.h>

void Bubble(int* p, int n)
{
    int temp, flag = 1;
    flag = 1;   //标志位,如果已经完成排序,则不用再进行循环比较
    for (int i = 0; (i < n - 1)&&(flag); i++) //如果flag=0,则说明已经完成
    {
        flag = 0;
        for (int j = 0; j < n - i-1; j++)
        {
            if (p[j] > p[j + 1])
            {
                temp = p[j];
                p[j] = p[j + 1];
                p[j + 1] = temp;
                flag = 1;   //说明出现调换,更改标志位
            }
        }
    }
}

int main()
{
    int a[] = { 4,2,5,6,7,8,3,1,9 };
    Bubble(a,9);
    printf_s("冒泡排序后:\n");
    for (int i = 0; i < 9; i++)
    {
        printf_s("%d ", a[i]);
    }

    return 1;
}

 

posted @ 2020-03-02 22:15  kkzhang  阅读(841)  评论(0编辑  收藏  举报