用C实现"冒泡排序"

87 阅读1分钟
  • (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);

}