排序之选择排序(图解)
选择排序的思想其实比较简单,每循环一遍,就找到一个最小的或最大的,找到最小的,就和最左边的换,找到最大的就和嘴右边的换,如下图所示:
此图是找小的,每次遍历一遍就把找到最小的放在左边,直到结束。其实我们可以优化代码,同时找到最大的喝最小的,把最大的放在右边,最小的放在左边,如此循环下去。
void selectSort(int* a, int size)
{
//选择排序的思想就是每一次找到一个最大的,放到最后面,找到一个最小的放到最前面
int left = 0;//定义最左边的下标
int right = size - 1;//定义最右边的下标
while (left < right)
{
int min = left;
int max = left;//假设最大和最小的都是在最左边
for (int i = left; i <= right; i++)
{
if (a[i] < a[min])//如果小于下标为min的值,就把i的值赋给min;
{
min = i;
}
if (a[i] > a[max])//如果大于下标为max的值,就把i的值赋给max;
{
max = i;
}
}
Swap(&a[min], &a[left]);
if (max == left)
{
Swap(&a[right], &a[min]);
}
else
{
Swap(&a[max], &a[right]);
}
left++;
right--;
}
}
这if语句的的作用是什么,为什么要这么写,你知道吗?