注册 登录
编程论坛 C语言论坛

c语言把a所指向数组中的数据最初排列为:1,2,3,4,5,6,7,8,9.按以上规则移动数组中的数据后,数据的排列为:1,9,2,8,3,7,4,6,5

Gloria_zhang 发布于 2020-12-08 18:13, 1267 次点击
只有本站会员才能查看附件,请 登录

程序代码:
#include <stdio.h>

void fun(int a[],int n)
{
    int i,j,min,max,px,pn,t;
   
    for(i=0;i<n-1;i+=2)
    {
        min=max=a[i];
        px=pn=i;
        
        for(j=i+1;j<n;j++)
        {
            if(max<a[j]) {max=a[j]; px=j;}
             if(min>a[j]) {min=a[j]; pn=j;}
            
        }
        if(pn!=i)
          {t=a[i]; a[i]=min; a[pn]=t; if(px==i) px=pn;}
        
        if(px!=i+1)
          {t=a[i+1]; a[i+1]=max; a[px]=t;}
    }
}

int main()
{
    int a[9]={9,1,4,2,3,6,5,8,7},i;
   
    fun(a,9);
     
    for(i=0;i<9;i++)
        
        printf("%d ",a[i]);
   
    return 0;
}


把a所指向数组中的数据最初排列为:1,2,3,4,5,6,7,8,9.按以上规则移动数组中的数据后,数据的排列为:1,9,2,8,3,7,4,6,5
请问大家图片高光的地方的那句代码怎么理解 看不懂了。
1 回复
#2
rjsp2020-12-08 18:37
这说的人话,……,很考验人呀!

当交换最小值元素时,可能更改了最大值元素的位置。
1