一、求最值
已知数组元素为{33,5,22,44,55},找出数组中的最大值并打印在控制台
#include<stdio.h>
#include<math.h>
int main()
{
int arr[] = {33,5,22,44,55};
int max = arr[0];
int len = sizeof(arr) / sizeof(int);
//注意:sizeof(arr)计算的是数组所占内存空间的总大小
//计算数组长度时,应该用数组所占内存空间总大小除以数组类型的内存
//比如:sizeof(arr)/sizeof(int)
for(int i = 0; i < len; i++)
{
if(arr[i] > max)
{
max = arr[i];
}
}
printf("%d\n",max);
return 0;
}
二、数组求和
生成10个1~100之间的随机数存入数组,要求数据不能重复
1)求出所有数据的和
2)求所有数据的平均数
3)统计有多少个数据比平均值小
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int arr[10] = {0};
int i = 0;
int sum = 0;
int num = 0;
int Num = 0;
srand((unsigned int) time(NULL));
//存入数据
for(i = 0; i < 10; i++)
{
int ret = rand() % 100 + 1;
arr[i] = ret;
}
//打印数据
for(int j = 0;j < 10;j++)
{
printf("%d ",arr[j]);
}
printf("\n");
//求和
for(int j = 0;j < 10;j++)
{
sum = sum + arr[j];
}
printf("和为%d ",sum);
//求平均数
num = sum / 10;
printf("平均数等于%d",num);
return 0;
//统计
for(int j = 0;j < 10;j++)
{
if(arr[j] < num)
{
Num++;
}
}
printf("有%d个数比平均数小",Num);
}
三、反转数组
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int arr[] = {2,4,6,8};
int len = sizeof(arr)/sizeof(int);
for(int i = len - 1;i >= 0;i--)
{
printf("%d ",arr[i]);
}
return 0;
}
四、打乱数组中数据的顺序
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int arr[] = {2,4,6,8};
int len = sizeof(arr)/sizeof(int);
srand(time(NULL));
int ret = rand() % len;
for(int i = 0;i < len;i++)
{
int temp = arr[i];
arr[i] = arr[ret];
arr[ret] = temp;
}
for(int i = 0;i < len;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
五、数组常见算法1-基本查找/顺序查找
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
int main()
{
//查找8,若存在则返回其索引值,若不存在,则返回-1
int arr[] = {2,4,6,8,10};
int len = sizeof(arr)/sizeof(int);
for(int i = 0;i < len;i++)
{
if(arr[i] == 8)
{
printf("%d",i);
}
}
return -1;
}
六、数组常见算法2-二分查找
前提:数据必须按顺序排列
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
int BinarySearch(int arr[],int num)
{
int min = 0;
int len = sizeof(arr) / sizeof(arr[0]);
int max = len - 1;
int mid = (min + max) / 2;
while(true){
if(min > max)
{
return -1;
}
//如果数字在mid的左边,则舍弃右边数字,max变为mid-1
if(num < arr[mid])
{
max = mid - 1;
}
//如果数字在mid的右边,则舍弃左边数字,min变为mid+1
if(num > arr[mid])
{
min = mid + 1;
}
//如果num和mid索引上的数字相同,则返回mid
if(num == arr[mid])
{
return mid;
}
}
}
int main()
{
int arr[] = {2,4,6,8,10};
int num = 8;
printf("%d",BinarySearch(arr,num));
}
七、冒泡排序法
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int arr[] = {7,4,9,3,5,1};
int len = sizeof(arr) / sizeof(int);
for(int i = 0;i < len - 1;i++)
{
for(int j = 0;j < len - 1 - i;j++)
{
if(arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(int i = 0;i < len;i++)
{
printf("%d ",arr[i]);
}
}