数组倒序排列,数组倒置,C语言数组倒序算法详解
本节介绍将数组倒置的实现方法。所谓倒置就是将数组元素中的数据倒过来。
5
4
3
2
1
此程序中,for 循环括号中的写法是正确的。前面讲过,for 循环的格式为:
但是上面这个程序还不能称得上完美。程序中,完成相同功能执行的步数越少,算法就越好,效率也就越高。上面这个算法是完全的“复制”,数组有几个元素就执行多少次。其实有更好的算法,只需要上面算法执行步数的一半就能完成任务,即互换思想。
要完成倒置的功能,只需要第一个元素和最后一个元素交换、第二个元素和倒数第二个元素交换、第三个元素和倒数第三个元素交换……不管数组元素的个数是奇数还是偶数,这个算法都是成立的。如果是偶数那么每个元素都有机会交换;如果是奇数,那么最中间的那个元素就不交换。下面将数组加长,再将这种算法的程序给大家写一下:
215 7 9 8 1 15 1564 156 64 15 5 8 4 65 5 32 1 9 55 8 66 5 1
# include <stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 5}; int b[5]; //用来存放倒置后的数据 int i, j; for (i=0, j=4; i<5, j>=0; ++i, --j) { b[i] = a[j]; printf("%d\n", b[i]); } return 0; }输出结果是:
5
4
3
2
1
此程序中,for 循环括号中的写法是正确的。前面讲过,for 循环的格式为:
for (表达式1;表达式2;表达式3)
这只是一般的形式。以表达式 1 为例,它是一个“整体”,它可以是一个表达式,也可以是多个表达式,如果是多个表达式就用逗号隔开,如程序中那样。但是如果表达式间用分号隔开就不能看成一个“整体”,即只能看成一个表达式了,如上面的“表达式 1;表达式 2;表达式 3”。但是上面这个程序还不能称得上完美。程序中,完成相同功能执行的步数越少,算法就越好,效率也就越高。上面这个算法是完全的“复制”,数组有几个元素就执行多少次。其实有更好的算法,只需要上面算法执行步数的一半就能完成任务,即互换思想。
要完成倒置的功能,只需要第一个元素和最后一个元素交换、第二个元素和倒数第二个元素交换、第三个元素和倒数第三个元素交换……不管数组元素的个数是奇数还是偶数,这个算法都是成立的。如果是偶数那么每个元素都有机会交换;如果是奇数,那么最中间的那个元素就不交换。下面将数组加长,再将这种算法的程序给大家写一下:
# include <stdio.h> int main(void) { int a[23] = {1,5,66,8,55,9,1,32,5,65,4,8,5,15,64,156,1564,15,1,8,9,7,215}; int i = 0; //循环变量1, i的值为数组第一个元素的下标 int j = 22; //循环变量2, j的值为数组最后一个元素的下标 int buf; //互换时的中间存储变量 for (; i<j; ++i, --j) /*因为i和j已经初始化过了, 所以表达式1可以省略, 但表达式1后面的分号不能省。*/ { buf = a[i]; a[i] = a[j]; a[j] = buf; } for (i=0; i<23; ++i) { printf("%d\x20", a[i]); //\x20表示空格 } printf("\n"); return 0; }输出结果是:
215 7 9 8 1 15 1564 156 64 15 5 8 4 65 5 32 1 9 55 8 66 5 1
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频