选择排序
原理是在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后以此类推,直到所有元素均排序完毕,代码如下:
void SelectSort(int* arr, int size)
{
for (int i = 0; i < size - 1; i++) {
for (int j = i + 1; j < size; j++) {
if (arr[j] < arr[i]) {
swap(arr[j], arr[i]);
}
}
}
}
选择排序优化
我们实际可以在一次遍历中同时找到最小和最大的值,代码如下:
void SelectSort_Optimize(int* arr, int size)
{
int mini, maxi = 0;
int begin = 0;
int end = size - 1;
while (begin < end) {
mini = begin;
maxi = begin;
for (int i = begin + 1; i <= end; i++) {
if (arr[i] < arr[mini]) {
mini = i;
}
if (arr[i] > arr[maxi]) {
maxi = i;
}
}
swap(arr[mini], arr[begin]);
// 如果maxi=begin,上一步交换了begin和mini的值,会影响maxi指向的值
if (maxi == begin) {
maxi = mini;
}
swap(arr[maxi], arr[end]);
begin++;
end--;
}
}