#include<stdio.h>
int main()
{
int n; //正整数N
int i,j; //循环参数
int d; //最值参数
int p,q; //换位参数
scanf("%d",&n);
int z[10];
for(i=0;i<n;i++)
{
scanf("%d",&z[i]);
}
for(i=0;i<n;i++) //第一步,求最小值并将其与数组第一个元素互换位置
{ //想要求出最值而又不改变数组中元素的排列顺序,便
d=0; //引入最值参数d 原理:d的初始值为 0,然后让数组中
for(j=0;j<n;j++) //的第i个元素依次与数组中的每个元素作差,每次作差
{ //后,若差值小于0,则令d的值减一。最后检测d的值,
if(z[i]-z[j]<0) //若d的值为1-n,说明第i个元素小于除自身外的所有
d--; //元素。此时这第i个元素就是所有元素中的最小值。
}
if(d==1-n)
{
p=z[0]; //这里在求出最小值后就把它与第一个元素交换位置
z[0]=z[i];
z[i]=p;
}
}
for(i=0;i<n;i++) //这段是求最大值的过程,原理同上。
{
d=0;
for(j=0;j<n;j++)
{
if(z[i]-z[j]>0)
d++;
}
if(d==n-1)
{
q=z[n-1];
z[n-1]=z[i];
z[i]=q;
}
}
for(i=0;i<n;i++)
{
printf("%d ",z[i]);
}
return 0;
}
利用“最值参数”,我们只需要调整“最值参数”的阈值x-n和n-x(即代码中的1-n和n-1)就可以求出数组中的第 x 大或第 x 小的数。而且不会影响数组中元素的排列顺序。