下面的 bubble_sort1 是通常的冒泡排序写法,存在的问题是,即使当给定的数组已经是有序的情况下,本方法的时间复杂度依然为O(n2),就是说,依然需要进行 n*(n-1)/2 次比较 void bubble_sort1(int arr[], int len) { int i, j; int temp; for (i = 0; i < len - 1; i++) { for (j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } 下面的 bubble_sort2 是优化后的冒泡排序写法,当给定的数组已经是有序的情况下,本方法的时间复杂度为O(n) void bubble_sort2(int arr[], int len) { int i, j; int temp; int isChanged = 0;//判断是否有元素发生交换 for (i = 0; i < len - 1; i++) { if (isChanged==1) { break; } isChanged = 1; for (j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; isChanged = 2; } } } } 测试代码 int main() { int arr[] = { 9, 2, 3, 4, 5, 6,7,8 }; int len = (int) sizeof(arr) / sizeof(*arr); bubble_sort1(arr, len); arr[] = { 1, 2, 3, 4, 5, 6,7,8 }; len = (int) sizeof(arr) / sizeof(*arr); bubble_sort2(arr, len); return 0 }