原理
先找最小的放在第一个,接着在剩余部分再找最小的放第二个以此类推
代码实现
void sort(int arr[], int n)
{
for (int j = 0; j < n - 1; j++)
{
int minPos = j;
for (int i = j + 1; i < n; i++)
{
if (arr[i] < arr[minPos])
{
minPos = i;
}
}
swap(&arr[j], &arr[minPos]);
}
}
优化思路
每次遍历数组同时找出最大值和最小值,分别放在两端,同时收缩
void sortP(int arr[], int n)
{
for (int j = 0; j < n - j - 1; j++)
{
int minPos = j;
int maxPos = n - j - 1;
for (int i = j; i < n - j; i++)
{
if (arr[i] < arr[minPos])
{
minPos = i;
}
if (arr[i] > arr[maxPos])
{
maxPos = i;
}
}
if (minPos == maxPos)
{
return;
}
if (minPos == n - j - 1)
{
swap(&arr[j], &arr[minPos]);
swap(&arr[n - j - 1], &arr[maxPos]);
}
else
{
swap(&arr[n - j - 1], &arr[maxPos]);
swap(&arr[j], &arr[minPos]);
}
}
}
评价
比较弱小,并且不稳定
最简单的算法
速度缓慢