0001 void bubblesort1B(int A[], int n) { //起泡排序算法(版本1B,与版本1A完全等价):0 <= n 0002 for (bool sorted = false; sorted = !sorted; n--) { //在尚未确认已全局排序之前,逐趟进行扫描交换 0003 for (int i = 1; i < n; i++) { //自左向右逐对检查当前范围A[0, n)内的各相邻元素 0004 if (A[i-1] > A[i]) { //一旦A[i-1]与A[i]逆序,则 0005 swap(A[i-1], A[i]); //交换之,并 0006 sorted = false; //因整体排序不能保证,需要清除排序标志 0007 } //if 0008 } //for 0009 } //for 0010 } //借助布尔型标志位sorted,可及时提前退出,而不致蛮力地做n-1趟扫描交换 0011 //对尾部有序(或接近有序)的输入,算法依然亦步亦趋地收敛,导致元素比较次数过多