冒泡排序
冒泡排序(Bubble Sort)是所有排序算法中最简单的、最基本的一种;其思路就是交换排序,通过相邻数据的交换来达到排序的目的。
- 时间复杂度:平均时间复杂度为:
O(n * n)
,最差时间复杂度为:O(n * n)
。
- 空间复杂度:
O(1)
。
执行流程:
- 对数组中的各数据,依次比较相邻的两个元素的大小。
- 如果前面的数据大于(小于)后面的数据,就交换这两个数据。经过第一轮的多次比较排序后,便可把最小(大)的数据排好。
- 然后,再用相同的方法把剩下的数据逐个进行比较,最后便可按照从小到大(从大到小)的顺序排好数组中各数据的顺序。
示例
排序原始数据:39 52 89 44 86 26
升序排序(从小到大):
排序后结果:26 39 44 52 86 89
示例代码
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| typedef enum { RetError = -1, RetSuccess = 0, } RetValue;
typedef enum { SortASC = 0, SortDES = 1, }SortType;
RetValue BubbleSort(int* array, int len, SortType type) { if (NULL == array || 0 >= len) { printf("数组不存在,无法对其进行冒泡排序!\n"); return RetError; } for (int i = 0; i < len - 1; i++) { for (int j = i + 1; j < len; j++) { if (SortASC == type) { if (array[i] > array[j]) { int tem = array[i]; array[i] = array[j]; array[j] = tem; } } else if (SortDES == type) { if (array[i] < array[j]) { int tem = array[i]; array[i] = array[j]; array[j] = tem; } } } printf("第 %d 步结果:\t", i + 1); for (int k = 0; k < len; k++) { printf("%d\t", array[k]); } printf("\n"); } return RetSuccess; }
|