12.数组练习4 反转数组
#include <stdio.h>
void printArr(int arr[], int len);
int main()
{
/*
需求:键盘录入5个数据并存入数组,完成一下要求
1.遍历数组 2.反转数组3.再次遍历
*/
//1.定义数组
int arr[5] = { 0 };
int len = sizeof(arr) / sizeof(int);
//2.键盘录入数据
for (int i = 0; i < len; i++)
{
printf("请录入第%d个元素\n", i + 1);
scanf_s("%d", &arr[i]);
}
//3.遍历数组
printArr(arr, len);
//4.反转数组
int i = 0;
int j = len - 1;
while (i < j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
//5.遍历数组
printArr(arr, len);
return 0;
}
void printArr(int arr[], int len)
{
for (int i = 0; i < len; i++)
{
printf("%d\n", arr[i]);
}
}
13.数组练习5 打乱数组中的数据
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
/*
需求:定义一个数组,存入1-5,要求打乱数组中所有数据的顺序
*/
//1.定义数组
int arr[] = { 1,2,3,4,5, };
int len = sizeof(arr) / sizeof(int);
//2.遍历数组,得到每一个元素,让这个元素跟随机索引处的元素进行交换
//设置种子
srand(time(NULL));
for (int i = 0; i < len; i++)
{
//获取一个随机索引
//0~4
int index = rand() % len;
//拿着i指向的元素,跟index指向的元素进行交换
int temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
//3.遍历数组
for (int i = 0; i < len; i++)
{
printf("%d\n", arr[i]);
}
}
14.数组常见算法1 基本查找/顺序查找
小程序
#include <stdio.h>
int order(int arr[], int len, int num);
int main()
{
/*
需求:数组的基本查找
核心思路:就是从数组的0索引开始,依次往后查找
如果找到了,就会返回数据对应的索引
如果没有找到,就会返回-1
*/
//1.定义数组
int arr[] = { 11,22,55,77,44 };
int len = sizeof(arr) / sizeof(int);
//2.定义一个变量表示要查找的数据
int num = 55;
//3.调用函数查找数据
int index =order(arr, len,num);
//4.输出索引
printf("%d\n", index);
return 0;
}
//作用:查找数组中的数据
//返回值:数据所在的索引
int order(int arr[], int len, int num)
{
for (int i = 0; i < len; i++)
{
if (arr[i] == num)
{
return i;
}
}
return -1;
}
笔记

15.数组常见算法2 二分查找/折半查找
小程序
#include <stdio.h>
int binarySearch(int arr[], int len, int num);
int main()
{
/*
需求:数组的二分查找
在7,23,79,81,103,127,131,147 中查找数据
*/
//1.定义数组
int arr[] = { 7,23,79,81,103,127,131,147 };
int len = sizeof(arr) / sizeof(int);
//2.定义变量表示要查找的数据
int num = 150;
//3.调用函数查找数据
int index = binarySearch(arr, len, num);
//4.输出
printf("%d\n", index);
return 0;
}
//作用:利用二分查找法查找数据
//返回值:数据在数组中的索引
//找到了,真实的索引
//没有找到,返回-1
int binarySearch(int arr[], int len, int num)
{
//1.确定查找的范围
int min = 0;
int max = len - 1;
//2.利用循环不断得进行查找
while (min <= max)
{
//确定中间位置
int mid = (min + max) / 2;
//比较
//min max mid 表示索引
//num表示要查找的元素
//坑:arr[mid]跟num进行比较
if (arr[mid] < num)
{
//要查找的数据在右边
min = mid + 1;
}
else if (arr[mid] > num)
{
//要查找的数据是在左边
max = mid - 1;
}
else
{
return mid;
}
}
//3.如果min大于maxl,表示数据不存在,赶回-1
return -1;
}
笔记

