冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
最坏时间复杂度 O(n^2)
冒泡排序是稳定的排序算法。
- #include <stdio.h>
- #define bool int
- #define false 0
- #define true 1
- void bubble_sort(int a[], int num)
- {
- int i, j, k;
- for (i = 0; i < num; i++) {
- bool flag = false;/* mark for need bubble sort*/
- for (j = 0; j < num - i - 1; j++) {
- if (a[j] > a[j+1]) {
- flag = true;
- int tmp = a[j];
- a[j] = a[j+1];
- a[j+1] = tmp;
- }
- }
- if (!flag)/* if this turn have no exchange.end sort*/
- break;
- print(a, num);
- }
- }
- void print(int a[], int num)
- {
- for (k = 0; k < num; k++)
- printf("%d ", a[k]);
- printf("/n");
- }
- int main()
- {
- int i, num;
- int a[] = {4,7,3,8,2,1,9,6,5,10};
- num = sizeof(a) / sizeof(int);
- bubble_sort(a, num);
- print(a, num);
- return 0
- }
第10行设置了flag,一旦发现不用再交换元素则终止循环,提高了效率。