2024年陕西科技大学数据结构程序填空题+预测

server/2024/11/30 8:44:09/
  • 递归实现插入排序

#include <stdio.h>void insertion_sort(int arr[], int n)
{if (n > 1){insertion_sort(arr, n - 1);arr[0] = arr[n];int i;for (i = n - 1; i > 0; i--){if (arr[i] > arr[0]){arr[i + 1] = arr[i];}else{break;}}arr[i + 1] = arr[0];}
}int main()
{int arr[] = {0, 5, 3, 8, 6, 2, 7}; // 哨兵在 arr[0],实际元素从 arr[1] 开始int n = 6; // 数组中实际待排序的元素个数insertion_sort(arr, n);for (int i = 1; i <= n; i++) // 输出排序后的数组,从 arr[1] 开始{printf("%d ", arr[i]);}return 0;
}

原理:

整个流程的详细讲解:

  1. 初始数组:arr[] = { 0, 5, 3, 8, 6, 2, 7 }

    • 哨兵 arr[0] = 0,实际待排序的元素从 arr[1] 开始:[5, 3, 8, 6, 2, 7]
  2. 第一次递归 (n = 6):

    • 递归调用 insertion_sort(arr, 5) 排序前 5 个元素 [5, 3, 8, 6, 2]
  3. 第二次递归 (n = 5):

    • 递归调用 insertion_sort(arr, 4) 排序前 4 个元素 [5, 3, 8, 6]
  4. 第三次递归 (n = 4):

    • 递归调用 insertion_sort(arr, 3) 排序前 3 个元素 [5, 3, 8]
  5. 第四次递归 (n = 3):

    • 递归调用 insertion_sort(arr, 2) 排序前 2 个元素 [5, 3]
  6. 第五次递归 (n = 2):

    • 递归调用 insertion_sort(arr, 1) 排序前 1 个元素 [5]。此时递归停止,因为 n <= 1
  7. 回溯递归过程:

    • 返回 n = 2arr[0] = 3,执行插入操作,数组变为 [3, 5]
    • 返回 n = 3arr[0] = 8,数组变为 [3, 5, 8]
    • 返回 n = 4arr[0] = 6,数组变为 [3, 5, 6, 8]
    • 返回 n = 5arr[0] = 2,数组变为 [2, 3, 5, 6, 8]
    • 返回 n = 6arr[0] = 7,数组变为 [2, 3, 5, 6, 7, 8]
  8. 输出排序后的数组

    • 输出从 arr[1] 开始的元素:2 3 5 6 7 8

完整排序过程:

  • 排序前:[0, 5, 3, 8, 6, 2, 7]
  • 排序后:[2, 3, 5, 6, 7, 8]
  • 递归实现选择排序

#include <stdio.h>void selection_sort(int arr[], int n)
{if (n > 1){// 找到从前 n 个元素中最大值的索引int max_index = 0; // 假定第一个是最大值for (int i = 1; i < n; i++) // 遍历前 n 个元素{if (arr[i] > arr[max_index]){max_index = i;}}// 将最大值与最后一个元素交换int temp = arr[n - 1];arr[n - 1] = arr[max_index];arr[max_index] = temp;// 递归调用,排序前 n-1 个元素selection_sort(arr, n - 1);}
}int main()
{int arr[] = { 64, 25, 12, 22, 11 }; // 输入数组int n = sizeof(arr) / sizeof(arr[0]); // 数组长度selection_sort(arr, n);printf("Sorted array: ");for (int i = 0; i < n; i++) // 输出排序后的数组{printf("%d ", arr[i]);}return 0;
}

  • 递归实现冒泡排序

#include <stdio.h>void bubble_sort(int arr[], int n)
{// 基本情况:如果数组大小为 1 或 0,直接返回if (n <= 1)return;// 一次遍历,将当前范围内的最大值移动到末尾for (int i = 0; i < n - 1; i++){if (arr[i] > arr[i + 1]){// 交换相邻元素int temp = arr[i];arr[i] = arr[i + 1];arr[i + 1] = temp;}}// 递归调用,对前 n-1 个元素排序bubble_sort(arr, n - 1);
}int main()
{int arr[] = { 64, 34, 25, 12, 22, 11, 90 };int n = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, n);printf("Sorted array: ");for (int i = 0; i < n; i++){printf("%d ", arr[i]);}return 0;
}


http://www.ppmy.cn/server/146124.html

相关文章

.net XSSFWorkbook 读取/写入 指定单元格的内容

方法如下&#xff1a; using NPOI.SS.Formula.Functions;using NPOI.SS.UserModel;using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;using OfficeOpenXml.FormulaParsing.Excel.Functions.Numeric;/// <summary>/// 读取Excel指定单元格内容/// </summa…

【Linux相关】服务器无网情况配置conda

【Linux相关】 服务器无网情况配置conda 文章目录 环境配置1. 本地下载miniconda&#xff0c;传到服务器2. 确认安装包是否传送成功3. 确保有安装权限4. 安装5. 写路径6. 看一下是否成功 环境配置 ssh的话&#xff0c;服务器连不上网&#xff0c;无法在线下载&#xff0c;需要本…

python的函数与递归

需求&#xff1a; 编写一个函数&#xff0c;计算斐波那契数列的第 N 项&#xff0c;并使用递归实现。 为了计算斐波那契数列的第 N 项&#xff0c;可以使用递归方法。斐波那契数列的定义是&#xff1a; F(0) 0 F(1) 1 对于 n > 2&#xff0c;F(n) F(n-1) F(n-2)&#xf…

不同云计算网络安全等级

导读云计算的本质是服务&#xff0c;如果不能将计算资源规模化/大范围的进行共享&#xff0c;如果不能真正以服务的形式提供&#xff0c;就根本算不上云计算。 等级保护定级流程 定级是开展网络安全等级保护工作的 “基本出发点”&#xff0c;虚拟化技术使得传统的网络边界变…

Linux或者Docker中时区查询和修改(差8小时问题)

前因&#xff1a; 当我们在Linux或者Docker中部署程序时&#xff08;无论.Net或者Java或者等等&#xff09;获取系统时间时&#xff08;例如C# DateTime.Now&#xff09;&#xff0c;和北京时间差8小时。 解决&#xff1a; 一、版本1 先放几个Linux下常用命令&#xff1a; …

【VRChat 改模】着色器(shader)简介、预制体(prefab)简介

总览 1.着色器介绍 2.预制体介绍&#xff08;.prefab 文件&#xff09; 一、着色器 1.什么是着色器 2.VRChat 模型常用着色器 其中&#xff0c;日漫模型大部分使用 LilToon&#xff0c;欧美模型则使用 Poiyomi 较多 3.着色器 被存放在 工程文件夹的哪个目录下&#xff1f; …

【Qt】图片绘制不清晰的问题

背景 实现一个图片浏览器&#xff0c;可以支持放大/缩小查看图片。主要组件如下&#xff1a; // canvaswidget.h #ifndef CANVASWIDGET_H #define CANVASWIDGET_H#include <QWidget>class CanvasWidget : public QWidget {Q_OBJECT public:explicit CanvasWidget(QImag…

[Java基础] Lambda表达式 | 函数式接口

1. Lambda表达式 先看如下代码&#xff1a; public class LambdaDemo {public static void main(String[] args) {// 匿名内部类方式完成goSwimming(new Swimming() {Overridepublic void swim() {System.out.println("铁汁 , 我们去游泳吧....");}});// lambda表…