cmprtimes 记录比较的次数,用了flag以后可以减少比较次数,原因是如果某一轮没有交换数据,那么序列就已经是有序的了,不需要再做任何操作。 #include <stdio.h> #include <stdlib.h> void bubbleSort(int *arr,int n){ int i = 0; int j = 0; int cmprtimes = 0; int flag; for(i = 0;i<n-1;i++){ flag = 0; for(j = 0;j<n-1-i;j++){ cmprtimes++; if(arr[j] > arr[j+1]){ flag = 1; int tmp; tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } if(flag == 0) break; } printf("%d\n",cmprtimes); int k; for(k = 0;k<n;k++){ printf("%d ",arr[k]); } } int main() { int arr[5] = {1,5,2,3,4}; bubbleSort(arr,5); printf("\nHello world!\n"); return 0; }