- (void)bubbleSort {
//冒泡排序
int array[10] = {24, 17, 85, 13, 9, 54, 76, 45, 5, 63};
int num = 10;
int totalNum = 0;//总轮数
int lastExchangeIndex = 0;//记录每轮排序过程中最后发生交换操作的位置
int unorderedEndIndex = num - 1; //记录需要进行比较(无序)范围的最后位置
for (int i = 0; i < num - 1; i ++) {
BOOL isOccurExchange = NO;
for (int j = 0; j < unorderedEndIndex; j ++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
isOccurExchange = YES;
//j后面的元素均已有序,下轮排序只需比较到j位置即可
lastExchangeIndex = j;
}
}
unorderedEndIndex = lastExchangeIndex;
totalNum ++;
if (0 == unorderedEndIndex) {//数组已经有序
break;
}
if (!isOccurExchange) {//说明这轮没有发生元素交换,数组已经有序
break;
}
}
for (int k = 0; k < num ; k ++) {
printf("%d ", array[k]);
}
printf("总共经过%d轮",totalNum);
}