冒泡排序是一种简单的排序算法,其核心思想是通过重复遍历待排序的数组,每次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来,直到没有元素需要交换为止。
从数组的第一个元素开始,依次比较相邻的两个元素。如果前一个元素大于后一个元素,则交换这两个元素。每完成一轮遍历,最大的元素会“冒泡”到数组的末尾。之后缩小遍历范围(不再考虑已排好的末尾元素),重复上述过程,直到所有元素有序。
for (j = 0; j < len-1; j++)
{
for (i = 0; i < len-1-j; i++)
{
if (a[i] > a[i+1])
{
tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
}
}
选择排序是一种简单直观的排序,在每一轮排序中选出最小的之值。将其与第一位进行交换,随后几轮也是一样,与比较内的数据位置进行交换。
for (j = 0; j < len-1; j++)
{
min = j;
for (i = j + 1; i < len; i++)
{
if (a[i] < a[min])
{
min = i;
}
}
}
行数和列数必须为常量,格式为“数据类型 数组名[行数][列数]。本质:二维数组是由一维数组构成的一维数组,N维数组可以看成是由N-1维数组构成的一维数组。
初始化:
全部初始化:可以用大括号将所有元素值括起来进行初始化。
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
int a[2][3] = {1, 2, 3, 4, 5, 6};
局部初始化:只对部分元素进行初始化,未初始化的元素自动初始化为0。
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}};
默认初始化:行可以省略,列不能省略,系统会根据初始化值自动推断行数。
int a[][3] = {1, 2, 3, 4};
int a[][3] = {{1, 2}, {3}};
存储:连续性:数组在内存中所占空间大小等于每个元素所占空间大小乘以行数再乘以列数,元素在内存中是连续存储的。
有序性:元素按行依次存储,先存第0行所有元素,再存第1行所有元素,以此类推。
本质:二维数组是由一维数组构成的一维数组,N维数组可以看成是由N-1维数组构成的一维数组。
接收数据:可以通过嵌套的for循环来逐个接收用户输入的数据并存入数组。
for (j = 0; j < 2; j++)
{
for (i = 0; i < 3; i++)
{
scanf("%d", &a[j][i]);
}
}
在C语言中,字符串数组是一种常见且重要的数据结构,它实际上是以字符数组为基础的复合结构。由于C语言没有原生的字符串类型,字符串通常表示为以空字符'\0'结尾的字符数组。因此,字符串数组可以理解为"数组的数组"或"指针的数组"。
字符串:C语言使用字符型数组存储字符串。
定义:元素个数必须为常量,元素个数必须能够存放的下字符串(注意必须能够存放下字符串末尾的'\0'字符)
全部初始化
char str[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
char str[6] = {"hello"};
char str[6] = "hello";
局部初始化:没有给定的初值,默认全为0
char str[6] = {'h', 'e', 'l', '\0'};
char str[6] = {"hel"};
char str[6] = "hel";
char str[6] = {0};
默认初始化
char str[] = {'h', 'e', 'l', 'l', 'o', '\0'};
char str[] = {"hello"};
char str[] = "hello";
字符型数组在内存中存放数据的空间是连续的,存放数据的顺序也是有序的。
从终端接受有两种方式:scanf("%s", str) 或 gets(str),gets可以接受有空格的字符串。
char str[32] = {0};
scanf("%s", str);
gets(str);
字符串第一个字符到\0中间字符的个数(不包含\0);
1. strlen:获得字符串的长度。
#include
len = strlen(str);
注意strlen与sizeof区别:
sizeof获得数组所占字节空间大小(由数组定义时元素个数决定,与数组中存放的字符串
没有关系);
strlen获得数组中字符串的长度(与数组大小无关)。