C语言冒泡排序 | Eternal_zttz

C语言冒泡排序

冒泡排序是一种简单的排序算法 ,其基本思路如下:

  1. 比较相邻的元素,如果前一个比后一个大,就把它们两个调换位置。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
    其算法时间复杂度为O(n^2).
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #include <stdio.h>
    #define SWAP(a,b) {int t = a;a =b;b =t;}//宏定义交换过程
    void bubbleSort(int a[],int n);
    int main(){
    int i,n;
    scanf("%d",&n);
    int num[n];
    for (i =0 ;i<n;i++)
    scanf("%d",&num[i]);
    bubbleSort(num,n);
    for (i =0;i<n;i++)
    printf("%d ",num[i]);
    }
    void bubbleSort(int a[],int n){
    int i,j;
    int flag = 0;
    for (i =0 ;i<n;i++){
    flag = 0;
    for (j = 0;j<n-1-i;j++){
    if(a[j]>a[j+1]){
    SWAP(a[j], a[j+1]);
    flag=1;
    }
    }
    if(flag == 0)
    break;//如果某一趟排序没有进行交换,说明排序已经结束,可以略微提高排序的效率
    }
    }

程序输入:

1
2
9
1 5 6 8 4 3 2 9 15

程序输出:

1
1 2 3 4 5 6 8 9 15


-------------The End-------------