数组是一组相同类型元素的集合
创建数组:类型 + 数组名 + [数组的大小];[ ]里面只能放字面常量,或宏定义的常规的常量
初始化数组:(在创建数组的同时给数组的内容一些合理初始值)
数组赋值:不能被整体赋值,可以通过循环的方式赋值;
数组是使用下标来访问
具体如下例子:
int main()
{
int arr[5];//定义一个数组,如果没有初始化,则产生的是随机值
int a[] = { 0, 1, 2, 3, 4 };//有元素个数可以不写数组的大小,编译器会自动分配数组的大小
char b[] = { 'a', 'b', 'c', 'd' };//元素个数为4
char b1[] = "abcd";//元素个数为5,字符串以'\0'结尾,所以默认把'\0'作为数组的内容
int num = sizeof(arr1) / sizeof(arr1[0]);//求数组元素个数
int arr1[5] = { 1, 2, 3 };//5个元素,赋了三个值,后面的默认为0
arr1[0] = 0;//可以这样一个个赋值
int j = 0;
for (; j < 5; j++)//循环赋值
{
arr1[j] = j;//
}
int i = 0;
for (; i < num; i++)//打印数组(循环)
{
printf("%d ",arr1[i]);//0 1 2 3 4
}
printf("\n");
system("pause");
return 0;
}
二维数组
二维数组的本质也是一位数组,只是这个一维数组里的每个元素也是一个数组
比如:
char a[ ][4] = { { 1, 2, 3, 4 }, { 3, 4, 5, 6 }, { 5, 6, 7, 8 } };//第一个[ ]可以不写,编译器自动分配大小
可以看作1个一维数组里有三个数组(元素),每个数组里有4个元素;
打印(遍历)二维数组:
int main()
{
int a[3][4] = { { 1, 2, 3, 4 }, { 3, 4, 5, 6 }, { 5, 6, 7, 8 } };
int i = 0;
//用双循环遍历
for (; i < 3; i++)
{
int j = 0;
for (; j < 4; j++)
{
printf("%d", a[i][j]);
}
printf("\n");
}
//用一层循环打印 指针
int m = 0;
int *p = &a[0][0];
for (; m < 3 * 4; m++)
{
printf("%d ", *p);
p++;
}
system("pause");
return 0;
}
冒泡排序:
思想:从头部开始。进行两两比较,根据大小交换位置,直到最后将大的(或小的)元素交换到了队尾,从而成为有序序列的一部分
我排序的是从小到大的:(从前往后两两比较,前大后小就交换,否则继续看后面的)
代码如下:
#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)
void bubble_sort(int *parr,int sz)
{
int max = parr[0];
int temp = 0;
int i = 0;
for (; i < sz - 1; i++)//要多少次
{
int j = 0;
for (; j < sz-1-i; j++)//从头到尾一次的结果
{
if (parr[j]>parr[j+1])
{
temp = parr[j];
parr[j]=parr[j+1];
parr[j+1] = temp;
}
}
}
//打印数组
for (i = 0; i < sz; i++)
{
printf("%d", parr[i]);
}
printf("\n");
}
int main()
{
int arr[] = { 1, 5, 3, 6, 7, 8, 0, 2 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr,sz);
system("pause");
return 0;
}