欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > Linux第一课:c语言 学习记录day06

Linux第一课:c语言 学习记录day06

2025/1/11 18:37:33 来源:https://blog.csdn.net/lymdcsdn/article/details/144977679  浏览:    关键词:Linux第一课:c语言 学习记录day06

四、数组

冒泡排序

两两比较,第 j 个和 j+1 个比较

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

第一轮:i = 0   n:n个数,比较 n-1-i 次

4 5 3 2 1 // 第一次比较 j = 0

4 3 5 2 1 // 第二次比较 j = 1

4 3 2 5 1 // 第三次比较 j = 2

4 3 2 1 5 // 第四次比较 j = 3

第二轮:i = 1   n-1-i 次

3 4 2 1 5 // 第一次比较 j = 0

3 2 4 1 5 // 第二次比较 j = 1

3 2 1 4 5 // 第三次比较 j = 2

第三轮:i = 2   n-1-i 次

2 3 1 4 5 // 第一次比较 j = 0

2 1 3 4 5 // 第二次比较 j = 1

第四轮:i = 3   n-1-i 次

1 2 3 4 5 // 第一次比较 j = 0

#include <stdio.h>
#define N 5int main ()
{int temp, i, j;int arr[N] = {5, 4, 3, 2, 1};for (i = 0; i < N-1; i++){for (j = 0 ; j < N-1-i; j++){if (arr[j] > arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}for (i = 0; i < 5; i++){printf("%-4d", arr[i]);}printf ("\n");return 0;
}

选择排序

n 个数:先找出最小的值下标暂存,选择出最小的值与 arr [i] 交换

排序过程:

1、首先通过n-1次比较,从n个数中找出最小值的下标,将它与第一个数交换,第一轮选择排序,结果最小值,被放在第一个元素的位置上

2、通过n-2次比较,从剩余的n-1个数中找到最小值的下标做记录,将它与第二个元素交换

3、重复这个过程,共经过n-1论排序后,排序结束

#include <stdio.h>
#define N 5int main ()
{int i, k, j, t, b;int a[N] = {1, 2, 3, 4, 5};for (i = 0; i < N-1; i++){k = i;for (j = i+1; j < N; j++){if ( a[k] < a[j]){k = j;}}if ( i != k){t = a[i];a[i] = a[k];a[k] = t;}}for (i = 0; i < N; i++){printf("%-4d", a[i]);}printf ("\n");return 0;
}

4、二维数组

1、格式

        存储类型  数据类型  数组名[行数][列数];

        int a[2][3];

2、访问元素

        数组名[行下标][列下标];(下标从0开始)

        a[0][0]:第一行第一列的元素

        a[1][2]:第二行第三列的元素

注意:行下标和列下标都不能越界

        行数可以省略,列数不能省略

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

3、二维数组的元素个数

        1)行数 * 列数

        2)sizeof(数组名)/sizeof(数据类型)

4、二维数组的大小

        sizeof(数组名)

        数据类型的大小 * 行数 * 列数

5、数组名

        a:第一行首地址

        a+1:第二行首地址

        a+n:第 n+1 行首地址

6、初始化

1)全部初始化

        int a[2][3] = {1, 2, 3, 4, 5, 6};        // 顺序赋值

        int a[2][3] = {

                {1, 2, 3},

                {4, 5, 6}

        };        // 按行赋值

2)部分初始化

        未被初始化的元素值为0

        int a[2][3] = {1, 2, 3, 4};        // 顺序赋值

        int a[2][3] = {{1, 2}, {4, 5}}        // 按行赋值

3)未初始化

        随机值,需要单独赋值

        int a[2][3];

7、内存分配

        a是行地址,a[0]是列地址

a:第一行首地址

a+1:第二行首地址

a[0]:第一行第一列的地址

a[0]+1:第一行第二列的地址

a[1]:第二行第一列的地址

a[1]+1:第二行第二列的地址

8、二维数组遍历

        for循环嵌套,外层行数,内层列数

int a[m][n] = {};for(int i = 0; i < m; i++)
{for(int j = 0; j < n; j++){scanf();printf();}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com