C语言-数组元素收缩交换


①源程序

不要被字母迷惑,要按意群理解。

#include< stdio.h>

void fun(int*s,int a,int b)

{

int i,j,t;

i=a;j=b;

while(i

{t=*(s+i);*(s+i)=*(s+j);*(s+j)=t;

/*交换语句,交换指针所指两个元素*/

i++;j--;}

/*收缩语句,交换两个元素之后,首尾向内收缩,继续交换内侧两个元素,直到首尾相遇*/

}

main( )

{int a[10]={1,2,3,4,5,6,7,8,9,0},i,*p=a;

fun(p,0,3);

/*以a[0]和a[3]为首尾,收缩交换*/

fun(p,4,9);

/*以a[4]和a[9]为首尾,收缩交换*/

fun(p,0,9);

/*以a[0]和a[9]为首尾,收缩交换*/

for(i=0;i<10;i++)printf("%d",*(a+i));}

~

②计算过程

原数组为

a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]

1,2,3,4,5,6,7,8,9,0


fun(p,0,3)之后的变化

1,2,3,4,5,6,7,8,9,0

4,2,3,1

4,3,2,1

4,2,3,1,5,6,7,8,9,0


fun(p,4,9)之后的变化

4,2,3,1,5,6,7,8,9,0

-,-,-,-,0,6,7,8,9,5

-,-,-,-,0,9,7,8,6,5

-,-,-,-,0,9,8,7,6,5

4,2,3,1,0,9,8,7,6,5


fun(p,0,9)之后的变化

4,2,3,1,0,9,8,7,6,5

5,2,3,1,0,9,8,7,6,4

5,6,3,1,0,9,8,7,2,4

5,6,7,1,0,9,8,3,2,4

5,6,7,8,0,9,1,3,2,4

5,6,7,8,9,0,1,3,2,4

你可能感兴趣的:(C语言-数组元素收缩交换)