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


①源程序

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

#include< stdio.h>

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

{

int i,j,t;

i=a;j=b;

while(i<j)

{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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容