冒泡排序
相邻元素比较大小,交换位置。每一轮排序结束,非有序区中最大(最小)元素确定。
for(int i=1; i<=n-1; i++) { for(int j=1; j<=n-i-1; j++) { if(a[j] > a[j+1]) { int tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; } } }
实际有序区大于已排序的有序区时的优化
int lastExchangeIndex=0;//记录最后一次交换的位置 int sortBorder=n-1; //无序区边界 for(int i=1; i<=n-1; i++) { bool isSorted=true;//判断序列是否为有序 for(int j=1; j<=sortBorder; j++) { if(a[j]>a[j+1]) { int tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; isSorted=false; lastExchangeIndex=j;//无序区边界更新为最后一次交换的位置 } } sortBorder=lastExchangeIndex; if(isSorted) break; }
浙公网安备 33010602011771号