#include <stdio.h> #include <stdlib.h> //冒泡排序非正式版 //默认从小到大排序 //时间复杂度:n+n-1+n-2+......+1 即(n+1)n/2,O(n^2) void BublbleSort1(int k[], int n) { int i, j, tmp; for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) { if (k[i] > k[j]) { tmp = k[i]; k[i] = k[j]; k[j] = tmp; } } } } //冒泡排序正式版 //基本思想:两两相邻记录的关键字,如果反序则交换,直到没有反序为止 //最坏情况和BublbleSort1执行次数相同,对于特殊的序列,效率大大提升 void BublbleSort2(int k[], int n) { int i, j, tmp; bool flag = true; for (i = 0; ((i < n - 1 )&& flag); i++) { flag = false; for (j = n-1; j > i; j--) { if (k[j-1] > k[j]) { tmp = k[j-1]; k[j-1] = k[j]; k[j] = tmp; flag = true; } } } } void print(int a[], int num) { int i = 0; for (i = 0; i < num; i++) { printf("%d ", a[i]); } printf(" "); } int main() { int a[10] = { 2, 3, 56, 1, 4, 7, 8, 94, 3, 10 }; BublbleSort2(a, 10); print(a, 10); return system("pause"); }