在每次循环中同时找到最大值和最小值
# include <stdio.h>
void print(int * a, int len)
{
for(int i=0; i<len; i++)
printf("%d ", a[i]);
printf("\n");
}
void swap(int * a, int * b)
{
int t = *a;
*a = *b;
*b = t;
}
void selsort(int * a, int len)
{
int i=0, j=len-1;
while(i < j)//执行n/2次向下取整
{
int min=i, max=j;
for(int m=i+1; m<=j; m++)//找到最小值,执行n/2加到1次
{
if(a[m]<a[min])
min = m;
}
swap(&a[i], &a[min]);
for(int n=j-1; n>=i; n--)//找到最大值,执行n/2加到1次
{
if(a[n]>a[max])
max = n;
}
swap(&a[j], &a[max]);
i++;
j--;
}
}
int main(void)
{
int a[5] = {8, 5, 6, 1, 5};
selsort(a, 5);
print(a, 5);
return 0;
}