- (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]);
}
}