在不改变原数组顺序的情况下,如何将最大值、次最大值与a[0]、a[1]调换?

列给定程序中,函数fun的功能是:找出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和 a[1] 中的数对调。这个程序改变了原数组顺序,在不改变顺序的情况下如何实现这个功能?怎么改?
img

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;
}