//------------------------------利用标签优化冒泡排序------------------------------------
//优化思想:当执行完一趟,而没有发生任何交换的时候,证明数组已经排好序,没有必要在进行之后的比较.
//设置一个标志,判断本趟是否进行了交换,如果交换了则继续执行,如果没交换,则停止循环.
int array[5] = {9, 1, 2, 3, 4};
for (int i = 0; i < 5 - 1; i++) {
BOOL flag =YES;//放的位置很关键,当有交换是flag被置为了NO,执行下一趟时,需要将flag重置为YES
for (int j = 0; j < 5 - 1 - i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = NO;//当发生交换时,将flag置为NO,在之后的判断中将不会跳出循环.
}
}
if (flag) {//当flag为YES时,也就证明没有发生交换,可以停止循环了.
break;
}
}