您的位置:首页 > 其它

DC-6:数组逆序的两种思路

2017-07-16 00:17 190 查看
#include <stdio.h>

#define N 10

// for循环

int main1()

{
int a
= {0,1,2,3,4,5,6,7,8,9};

int i;
int tmp;
for (i = 0; i < N/2; i++)
{
tmp = a[i];
a[i] = a[N-i-1];

int main()

{
int a
= {0,1,2,3,4,5,6,7,8,9};

int min = 0;    // 数组第一个元素的下标
int max = N-1;  // 数组最后一个元素的下标
int tmp;
while (min < max)
{

/*
tmp    = a[min];
a[min] = a[max];
a[max] = tmp;
min++;
max--;

*/
tmp      = a[min];
a[min++] = a[max];
a[max--] = tmp;
}
int i;
for (i = 0; i < N; i++)
{
printf ("%d\n", a[i]);
}

return 0;

}

a[N-i-1] = tmp;}for (i = 0; i < N; i++){printf ("%d\n", a[i]);}return 0;}

用for循环时,从第一个数到中间一半开始循环,依次交换收尾相对应的值,N/2无论奇数个数还是偶数个数

,都是只取一半。

int main()

{
int a
= {0,1,2,3,4,5,6,7,8,9};

int min = 0;    // 数组第一个元素的下标
int max = N-1;  // 数组最后一个元素的下标
int tmp;
while (min < max)
{

/*
tmp    = a[min];
a[min] = a[max];
a[max] = tmp;
min++;
max--;

*/
tmp      = a[min];
a[min++] = a[max];
a[max--] = tmp;
}
int i;
for (i = 0; i < N; i++)
{
printf ("%d\n", a[i]);
}

return 0;

}

用while循环时,可设一个变量也可设两个。两个变量,一个指向头,一个指向末尾,每次指头的小于

指向末尾的,说明他们还没“相遇”,一旦相遇,说明已经交换完,需要注意的使,每次交换完,对于

指向的要++或者--。

比较两种方法,第一种对于所有的对应交换的值很方便,但对于跳跃或者选择性的整体交换不够方便,

引入变量,对于程序的变量是增多了,但对于程序的运行便方便。相较来说,程序运行的思想是需要最高

的效率,巧妙的引用变量可以使问题变得简单。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: