时间:2024.12.3
一、实验
7-1 交换最小值和最大值
#include<stdio.h>
int main()
{
int n, a[10], i, min = 0, max = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d",&a[i]);
}
for (i = 0; i < n; i++)
{
if (a[min] > a[i])
{
min=i;
}
}
//找出最小值所在位置
int b = a[0];
a[0] = a[min];
a[min] = b;
//数组b用于交换
for (i = 0; i < n; i++)
{
if (a[max] < a[i])
{
max = i;
}
}
//找出最大值所在位置
b = a[max];
a[max] = a[n - 1];
a[n - 1] = b;
for(i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
return 0;
}
代码解释
- 输入读取
- 首先读取整数
n
,表示数组的长度。 - 然后使用
scanf
循环读取n
个整数,存储到数组arr
中。
- 首先读取整数
- 寻找最小值和最大值的索引
- 通过遍历数组,找到最小值的索引
min_index
和最大值的索引max_index
。
- 通过遍历数组,找到最小值的索引
- 交换最小值和第一个数
- 使用一个临时变量
temp
,将数组的第一个元素arr[0]
和arr[min_index]
交换。
- 使用一个临时变量
- 处理最大值索引可能为 0 的情况
- 如果
max_index
为 0,说明最大值原本在第一个位置,由于第一步交换,最大值现在在min_index
位置,所以将max_index
更新为min_index
。
- 如果
- 交换最大值和最后一个数
- 同样使用临时变量
temp
,将数组的最后一个元素arr[n - 1]
和arr[max_index]
交换。
- 同样使用临时变量
- 输出结果
- 最后遍历数组并输出交换后的数组元素。
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int min_index = 0, max_index = 0;
for (int i = 1; i < n; i++) {
if (arr[i] < arr[min_index]) {
min_index = i;
}
if (arr[i] > arr[max_index]) {
max_index = i;
}
}
int temp = arr[0];
arr[0] = arr[min_index];
arr[min_index] = temp;
if (max_index == 0) {
max_index = min_index;
}
temp = arr[n - 1];
arr[n - 1] = arr[max_index];
arr[max_index] = temp;
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
代码思路
- 寻找最小值并交换
- 通过循环遍历数组,比较数组中的每个元素与当前记录的最小值(初始为第一个元素)。
- 当发现有元素比当前最小值还小时,更新最小值的索引。
- 找到最小值索引后,将数组的第一个元素与最小值所在元素进行交换。
- 寻找最大值并交换
- 再次通过循环遍历数组,比较数组中的每个元素与当前记录的最大值(初始为第一个元素)。
- 当发现有元素比当前最大值还大时,更新最大值的索引。
- 找到最大值索引后,将数组的最后一个元素与最大值所在元素进行交换。
- 输出结果
- 最后循环遍历数组,输出交换后的所有元素。
7-2 简化的插入排序
#include<std