一、数组排序
1.冒泡排序(两两比较,升序)
给出一个数组,第一轮第一个数与第二个数作比较,如果前者大于后者,则两者数据做交换,否则不交换,以此类推,第一轮交换后的最后一个数就为数组中的最大值,固定在此,第二轮比较剩下的数,直到经过数组元素数-1轮得出最终的升序排序。

![]()
编程实现:首先初始化一个数组和一些变量,利用双层for循环,外层for循环从j=0开始,当j<len-1时进行内层循环,每次循环j自增;内层for循环从i=0开始,当i<len-1-j时,进行一次内层循环,每次循环i自增。外层循环一次,内层循环一遍,这样就能实现每一轮的比较,最终输出升序的一组数。
2.选择排序(选择出最小的放在最前面)
给出一个数组,第一轮让第一个数与每一个数比较,如果小于第一个数,这个数为最小的数放在数组最前面固定,然后剩下的数作比较,以此类推,得出升序排列的一组数。

![]()
编程实现:首先初始化一个数组和一些变量,利用双层for循环外层for循环从j=0开始,当j<len-1时进行内层循环,每次循环j自增;每次外层循环min = i;内层for循环从i=j+1开始,当i<len时,行一次内层循环(如果a[min]>a[i],min = i),每次循环i自增;内层循环每循环一遍,如果min!=j,则进行a[min]与a[j]的交换。最终输出升序排列的一组数。
二、二维整型数组
1.形式:数据类型 数组名[行数][列数]
2.元素访问
int a[2][3];
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
3.初始化
(1)全部初始化
int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; int a[2][3] = {1, 2, 3, 4, 5, 6};
(2)局部初始化
int a[2][3] = {1, 2, 3, 4}; int a[2][3] = {{1, 2}, {3}};
int a[2][3] = {0}; int a[2][3] = {{0}};
(3)默认初始化
int a[][3] = {1, 2, 3, 4}; int a[][3] = {{1, 2}, {3}}
注:行能省略,列不能省略
4.存储:
(1)连续性、有序性
(2)二维数组本质是由一维数组构成的一维数组
N维数组可以看成是由N-1维数组构成的一维数组
5.接收数据
for (j = 0; j < 2; j++)
{
for (i = 0; i < 3; i++)
{
scanf("%d", &a[j][i]);
}
}
三、一维字符型数组
1.形式:char str[元素个数];
元素个数必须为常量,元素个数必须能够存放的下字符串(包括'/0')
2.元素访问
数组名[元素下标];
注:元素下标范围: 0 - 元素个数-1
元素下标可以是常量、变量、表达式
数组只能对单个元素操作,不能对整体操作,想对整体操作需要使用库函数
3.字符串打印
printf %s:打印从数组开头到\0中间的内容
puts 打印从数组开头到\0中间的内容(多打印一个\n)
注:字符串操作函数接口操作字符串时,字符串末尾没有\0,可能导致内存越界
4.字符数组的初始化
(1)全部初始化
char str[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
char str[6] = {"hello"};
char str[6] = "hello";
(2) 局部初始化
char str[6] = {'h', 'e', 'l', '\0'};
char str[6] = {"hel"};
char str[6] = {0};
注:没有给定初值的元素,默认初始化为0值(整数0、字符\0)
(3)默认初始化
char str[] = {'h', 'e', 'l', 'l', 'o', '\0'};
char str[] = {"hello"};
char str[] = "hello"
5.存储:连续性、有序性
6.字符串的接收
scanf("%s", str);
gets(str);
注:gets可以接收带有' '的字符串,scanf("%s")只能接收不含' '的字符串
7.统计字符串的长度
strlen:获得字符串的长度(与数组大小无关)
sizeof:获得数组所占字节空间大小(与数组中存放的字符串无关)


C语言数组排序与二维、一维数组详解
6651

被折叠的 条评论
为什么被折叠?



