数组
一维数组定义的三种方式:
- 数据类型 数组名[ 数组长度 ];
- 数据类型 数组名[ 数组长度 ] = { 值1,值2 …};
- 数据类型 数组名[ ] = { 值1,值2 …};
总结1:数组名的命名规范与变量名命名规范一致,不要和变量重名
总结2:数组中下标是从0开始索引
1.数据类型 数组名[ 数组长度 ];
//数据类型 数组名[元素个数];
int score[10];
//利用下标赋值
score[0] = 100;
score[1] = 99;
score[2] = 85;
//利用下标输出
pintf(“%d\n”, score[0]);
pintf(“%d\n”, score[1]);
pintf(“%d\n”, score[2]);
2.数据类型 数组名[ 数组长度 ] = { 值1,值2 …};
//第二种定义方式
//数据类型 数组名[元素个数] = {值1,值2 ,值3 ...};
//如果{}内不足10个数据,剩余数据用0补全
int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 };
//逐个输出
pintf(“%d\n”, score2[1]);
pintf(“%d\n”, score2[0]);
//一个一个输出太麻烦,因此可以利用循环进行输出
for (int i = 0; i < 10; i++)
{
pintf(“%d\n”, score2[i]);
}
3.数据类型 数组名[ ] = { 值1,值2 …};
//定义方式3
//数据类型 数组名[] = {值1,值2 ,值3 ...};
int score3[] = { 100,90,80,70,60,50,40,30,20,10 };
for (int i = 0; i < 10; i++)
{
pintf(“%d\n”, score3[i]);
}
system("pause");
return 0;
}
数组传参
-
sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组。
-
&数组名,取出的是数组的地址。&数组名,数组名表示整个数组。
除此1,2两种情况之外,所有的数组名都表示数组首元素的地址。
当数组传参的时候,实际上只是把数组的首元素的地址传递过去了。
排序算法
1.冒泡排序算法
冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序。
for (int i = 0; i < n-1; i++)
{
int flag = 0;
for (int j = 0; j < n - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = 1;
}
}
if (flag == 0)//flag没变就是后面已经是顺序排列了
{
break;
}
}
2.选择排序算法
-
假设有一个数是最大的,和每个数比较,找到最大的数
-
第一个数和最大的数进行交换
-
重复1 2
for (int i = 0; i < n ; i++)
{
int max = i;
for (int j = i+1; j < n ; j++)
{
if (arr[j] > arr[max])
{
max = j;//找到最大数的下标,和第一个数进行交换
}
}
if (max != 0)
{
int temp = arr[max];
arr[max] = arr[i];
arr[i] = temp;
}
}
3.洗牌算法
3.1随机数
//包含头文件
#include<stdlib.h>
#include<time.h>//引入时间戳
srand((unsigned)time(NULL));
//产生随机数的范围
//rand()%(max-min+1)+min
int ret = rand() % i;
3.2洗牌算法
srand((unsigned)time(NULL));
int a[17];
int len = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < len; i++)
{
a[i] = i + 1;;
}
for (int i = len; i > 0; i--)
{
//在0 ~ i-1 直接产生一个随机数
int ret = rand() % i;
//和最后一个数字做交换
int temp = a[ret];
a[ret] = a[i];
a[i] = temp;
}