数组的详细使用及冒泡排序方法

来源:互联网 发布:便宜好用的粉底液 知乎 编辑:程序博客网 时间:2024/06/05 09:24

1、数组初始化的方法(赋值方法)

         1)先定义数组,再赋值例:

              int arr[3];arr[0] = 10;arr[1] = 15;arr[2] = 14;

  解释:因为数组中实际存储数据的实际是内存中的每个小空间,所以应该是给小空间里赋值,那么数组里也许有多个小空间,怎么确定给哪个        小空间赋值呢?就是通过数组的下标来赋值。所以上面的方法是给小空间一个一个地赋值


         2)定义数组的同时初始化(赋值)

              A、完全初始化

                     int nums[5] = { 1, 2, 3, 4, 5 };

              B、不完全初始化,没有提供数据的默认初始化为0

                     int nums[10] = { 1, 2, 3, 4, 5 };

              C、省略数组长度,由编译器自动判断

                     int nums[] = { 1, 2, 3, 4, 5 };

              D、指定元素个数,同时给指定元素进行初始化

                     int nums[5] = {[4] = 3,[1] = 2};

    解释:以上三种方法都是在数组申明时直接按顺序给每个小空间赋值数据。

其他注意:不管是先定义数组,还是数组定义并初始化。只要数组一经定义,里面就有值,里面默认的值都为0(如果是字符型数组,那么就是ascii                       码中0所对应的字符'\0'即为空)

2、引用元素

     什么叫引用元素:

         引用数组元素表示使用数组中的每一个变量
     用法:         使用下标引用数组中指定的变量

     语法:
         数组名
[ 下标 ]

     例如:

                     int nums[] = { 1, 2, 3 };

                     printf("%d\n", nums[0]);

                     printf("%d\n", nums[1]);

                     printf("%d\n", nums[2]);

     引用数组元素和使用指定类型变量一样,可以读取数据赋值等

                  1)读取数据

                  2)获取数据(打印,计算)

                  3)自增等


3、遍历数组元素

    遍历的意思:就是访问每一个元素使用 for 循环对数组进行遍历
             for (int i = 0; i < length; i++) {

                      printf("%d\n", nums[i] );

              } 



冒泡排序:

    冒泡排序是指相邻的两个数进行比较,将小数放前面,大数放后面。最终排序结果呈从小到大排列。就像生活中沸腾的水,气泡由小变到大,因此也称为冒泡排序!(有些书籍或者有些人也将冒泡排序称之为从大到小排列,其实核心思想都一样,只要符合核心思想的都叫冒泡排序)

如:有五个数 

     5  4  3  2  1

    现需要用冒泡排序法将其从小到大排列


分析:

 

 04  5  3  2  1

        4  3  5  2  1

        4  3  2  5  1

        4  3  2  1  5

 

 比较4

 

 13  4  2  1  5

        3  2  4  1  5

        3  2  1  4  5

 

 比较3

 

 22  3  1  4  5

        2  1  3  4  5

 

 比较2

 

 31  2  3  4  5

 

 

 比较1

 

 一共比较了多少轮?长度-1-1

 

 每轮比较的次数长度 - 轮数 - 1

 

 

代码实现:


#include <stdio.h>


int main(int argc,const char * argv[]) {

   

    

//    int nums[] = {10,9,8,7,6,5,4,3,2,1};

    

    int nums[] = {5,4,3,2,1};

    

    int len = sizeof(nums) /sizeof(int);

    

    for (int i=0; i<len; i++) {

        

        printf("%d\n",nums[i]);

    }

    

    printf("-------以上是交换之前--------\n");

    

    for (int i=0; i<= len-1-1; i++) {//相当于 i<=3 i= 0,1,2,3


        for (int j=0; j<len-i-1; j++) {//相当于 j<=5-0-1; j<4   0 1 2 3

            

            if(nums[j] > nums[j+1] ){//如果当前遍历到的数字>下一个数字

             

                int temp = nums[j];

                

                nums[j] = nums[j+1];//j的位置,变成了下一个位置的元素

                

                nums[j+1] = temp;//把下一个位置的元素变成了J的元素

            }

        }

        

    }

    

    for (int i=0; i<len; i++) {

        

        printf("%d\n",nums[i]);

    }

    

    

    

    return 0;

}


0 0
原创粉丝点击