0001 void bubblesort1A( int A[], int n ) { //起泡排序算法(版本1A):0 <= n 0002 bool sorted = false; //整体排序标志,首先假定尚未排序 0003 while ( !sorted ) { //在尚未确认已全局排序之前,逐趟进行扫描交换 0004 sorted = true; //假定已经排序 0005 for ( int i = 1; i < n; i++ ) { //自左向右逐对检查当前范围A[0, n)内的各相邻元素 0006 if ( A[i - 1] > A[i] ) { //一旦A[i - 1]与A[i]逆序,则 0007 swap( A[i - 1], A[i] ); //交换之,并 0008 sorted = false; //因整体排序不能保证,需要清除排序标志 0009 } 0010 } 0011 n--; //至此末元素必然就位,故可以缩短待排序序列的有效长度 0012 } 0013 } //借助布尔型标志位sorted,可及时提前退出,而不致总是蛮力地做n - 1趟扫描交换