用C实现"选择排序"(优化)

79 阅读1分钟
  • (void)selectionSort {

    /*选择排序

     1.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

     2.再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

     3.重复第二步,直到所有元素均排序完毕。

     */

    int array[10] = {5, 27, 15, 19, 20, 44, 66, 14, 95, 63};

    int num = 10;

    //优化:同时确定最小值和最大值,交换次数为n/2;

    int left = 0;

    int right = num - 1;

    while (left < right) {

        int min = left;

        int max = right;

        for (int i = left; i <= right; i ++) {

            if (array[max] < array[i]) {

                max = i;

            }

            if (array[min] > array[i]) {

                min = i;

            }

        }

        if (min != left) {

            int minTemp = array[left];

            array[left] = array[min];

            array[min] = minTemp;

        }

        if (max == left) {//考虑最大值在最小值位置的情况

            max = min;

        }

        if (max !=  right) {

            int maxTemp = array[right];

            array[right] = array[max];

            array[max] = maxTemp;

        }

        left ++;

        right --;

    }

    

    for (int k = 0; k < num ; k ++) {

        printf("%d ", array[k]);

    }

}