列给定程序中,函数fun的功能是:找出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和 a[1] 中的数对调。这个程序改变了原数组顺序,在不改变顺序的情况下如何实现这个功能?怎么改?
void fun(int *a, int n)
{
int i, j, k, tmp;
for(i=1, j=0, k=0; i<n; i++)
{
if(a[i]>a[j])
{
k=j;
j=i;
}
else if(a[i]>a[k])
{
k=i;
}
}
tmp=a[0];
a[0]=a[j];
a[j]=a[0];
tmp=a[1];
a[1]=a[k];
a[k]=tmp;
}
不改变原数组顺序
怎么对调 a[0]、a[1]
新建一个数组吗
把最大值和最小值,retrun 出来 ,然后使用中间值进行交换
就和冒泡排序那个核心原理一样
tmp = a
a= b
b=tmpba
用个变量存就行了,然后交换值,有a,b
c=a,
a=b,
b=c
ab值就交换了
供参考:
void fun(int *a, int n)
{
int max , max_s ,t,i;
if (a[0] > a[1])
{
max = 0; max_s = 1;
}
else
{
max = 1; max_s = 0;
}
for (i = 2; i < n; i++)//找出最大值、次大值 位置
{
if (a[i] > a[max])
{
max_s = max;
max = i;
}
else if (a[i] >= a[max_s])
{
max_s = i;
}
}
if (max_s != 0)
{
t = a[0]; a[0] = a[max]; a[max] = t;
}
else
{
t = a[0]; a[0] = a[max]; a[max] = t; max_s = max;
}
t = a[1]; a[1] = a[max_s]; a[max_s] = t;
}