zoukankan      html  css  js  c++  java
  • 数组倒序排列,数组倒置,C语言数组倒序算法详解!

    数组倒置就是将数组元素中的数据倒过来!

    举个例子,比如下面程序:

    #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
    ", 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("%dx20", a[i]);  //x20表示空格
    
        }
    
        printf("
    ");
    
        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

    ----------------------


     

    如果你还想更深入的学习以及其他知识,不管你是转行也好,初学也罢,进阶也可~

    【值得关注】我的 编程学习交流俱乐部 !【点击进入】

    C语言入门资料:


     

    C语言必读书籍:


     
  • 相关阅读:
    A1052. Linked List Sorting (25)
    A1032. Sharing (25)
    A1022. Digital Library (30)
    A1071. Speech Patterns (25)
    A1054. The Dominant Color (20)
    A1060. Are They Equal (25)
    A1063. Set Similarity (25)
    电子码表
    矩阵键盘
    对象追踪、临时对象追踪、绝对坐标与相对坐标
  • 原文地址:https://www.cnblogs.com/huya-edu/p/14813374.html
Copyright © 2011-2022 走看看