一,认识数组
1
、
int a
[
N
];
//
表示有
N
个
int
类型的数据,他们在内存中是连续存储的
2
、数组占用内存的大小:
N
*
sizeof
(
int
)
===>
sizeof
(
a
);
3
、数组的初始化:
a
[
5
]
=
{
1
,
2
,
3
,
4
,
5
};
a
[]
=
{
1
,
2
,
3
};
//
不指定大小的数组必须在定义的同时进行初始化,表示有
3
个
int
注:如果只初始化数组前面的元素,后面的元素默认初始化为0
4
、不能用 变量来指定数组的大小。
二、基本算法
1、输入10个数,把他们中的最大值和最小值交换位置。
思路:首先我们需要确定数组的最大值和最小值,以及对应的索引。
可以利用宏定义来确定数组长度;
#define MAX 10//宏定义来确定一个数组的长度
int main(){
int arr[MAX];
printf("请输入数组:\n");
//利用循环可以将数据输入道数组里面;
for (int i = 0; i < MAX; ++i) {
scanf("%d",&arr[i]);
}
int index_max = 0;//最大值所在索引值
int index_min = 0;//最小值所在索引值
int max = arr[0];//默认最大值
int min = arr[0];//默认最小值
//查找最值
for (int i = 1; i < MAX; ++i)
{
if (min > arr[i])
{
min = arr[i];
index_min = i;
}
if(arr[i] > max)
{
max = arr[i];
index_max = i;
}
}
//交换最值
arr[index_min] = max;
arr[index_max] = min;
//3、重新遍历新数组
for (int i = 0; i < MAX; ++i)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
二、数组常用排序法
可以利用宏定义来确定数组长度;
#define MAX 10
1、冒泡排序:
思路:两两比较,将较大/较小值往后排,依次循环;
int main(){
int arr[MAX];
int temp;
int i;
int j;
for ( i = 0; i < MAX; ++i)
{
scanf("%d",&arr[i]);
}
for (int i = 0; i < MAX-1; ++i)
{
for (j = 0; j < MAX - 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 < MAX; ++i) {
printf("%d ",arr[i]);
}
}
2、选择排序:
思路:依次比较,将最大/最小值放在最后,循环进行;
int main(){
int i;
int j;
int temp;
int arr[MAX];
printf("亲输入数组:\n");
for (int i = 0; i < MAX; ++i)
{
scanf("%d",&arr[i]);
}
for (int i = 0; i < MAX-1; ++i) {
for (int j = i + 1; j < MAX; ++j) {
if (arr[i] > arr[j])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for (int i = 0; i < MAX; ++i) {
printf("%d ",arr[i]);
}
return 0;
}
常见的排序也就冒泡排序和选择排序,此外还有插入排序、快速排序等排序法,有机会可以给大家写一下;