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循环时,可设一个变量也可设两个。两个变量,一个指向头,一个指向末尾,每次指头的小于
指向末尾的,说明他们还没“相遇”,一旦相遇,说明已经交换完,需要注意的使,每次交换完,对于
指向的要++或者--。
比较两种方法,第一种对于所有的对应交换的值很方便,但对于跳跃或者选择性的整体交换不够方便,
引入变量,对于程序的变量是增多了,但对于程序的运行便方便。相较来说,程序运行的思想是需要最高
的效率,巧妙的引用变量可以使问题变得简单。
#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循环时,可设一个变量也可设两个。两个变量,一个指向头,一个指向末尾,每次指头的小于
指向末尾的,说明他们还没“相遇”,一旦相遇,说明已经交换完,需要注意的使,每次交换完,对于
指向的要++或者--。
比较两种方法,第一种对于所有的对应交换的值很方便,但对于跳跃或者选择性的整体交换不够方便,
引入变量,对于程序的变量是增多了,但对于程序的运行便方便。相较来说,程序运行的思想是需要最高
的效率,巧妙的引用变量可以使问题变得简单。
相关文章推荐
- 实现数组逆序排列的两种方法
- poj 2838 Cow Sorting 树状数组 两种思路
- 快速排序——栈和数组——两种思路(递归+挖坑填埋法)
- 两种常用的javascript数组去重方法思路及代码
- 两种数组逆序算法
- 归并排序,树状数组 两种方法求逆序对
- C++关于数字逆序输出的两种思路,及字符串逆序输出
- 数组中的逆序对(归并排序思路)
- 归并排序,树状数组 两种方法求逆序对
- 逆序对的两种算法【树状数组 / 归并排序】
- (转)js在数组中删除重复的元素自保留一个(两种实现思路)
- js在数组中删除重复的元素自保留一个(两种实现思路)
- [Unity3d][NGUI]打包NGUI预制件成Assetbundle 两种思路.
- 十个数逆序输出--数组应用
- php数组逆序输出
- 剑指offer-数组中的逆序对
- poj 2299 求逆序对 树状数组 归并排序
- php两种数组合并的区别