作业信息
这个作业属于哪个课程 | <班级的链接>(如2023-2024-1-计算机基础与程序设计) |
---|---|
这个作业要求在哪里 | <作业要求的链接>(如2023-2024-1计算机基础与程序设计第九周作业) |
这个作业的目标 | <《计算机科学概论第10,11章 》《C语言程序设计第8章》> |
作业正文 | https://www.cnblogs.com/TerMo/p/17854822.html本博客链接 |
教材学习内容总结
- 数组。数组的出现,就更加强调信息的地址了。这是一个全新的应用。
- 数组与函数。用数组这个元素定义函数、向函数传递数组。
- 排序算法的重要性。
- CUP调度,先到先服务,最短作业优先。
以上是通过录入学号、成绩,并排序的一个sortscoresByid的函数。它涵盖了这次C语言需要学习的大概内容:学会在定义函数时用上数组、学会按要求排序(以上是交换排序)等。
教材学习中的问题和解决过程
- 问题1:我感觉冒泡排序和现在学的交换排序很相似,易混乱。该怎么区分呢?
- 问题1解决方案:冒泡排序和交换排序都是基于不断比较和交换元素位置来实现排序的算法,但它们的实现方式有所不同。
冒泡排序是通过比较相邻的元素,如果它们的顺序不对就交换它们的位置,一直重复这个过程直到整个数组排序完成。而交换排序则是通过遍历数组,每次找到最小(或最大)的元素并将其与当前位置交换,直到整个数组排序完成。
因此,可以通过以下方式来区分两种排序算法:
- 冒泡排序是通过相邻元素的比较和交换来实现,而交换排序是通过找到最小(或最大)的元素并与当前位置交换来实现。
- 冒泡排序的时间复杂度是O(n2),而交换排序的时间复杂度是O(n2)到O(n)不等,因此在大规模数据排序时,交换排序通常更高效。
当然,以下是冒泡排序和交换排序的C语言示例:
冒泡排序的代码示例:
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
交换排序的代码示例:
void exchangeSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = i+1; j < n; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
- 问题2:CUP调度可以理解为同时下载两个文件,然后随时进行下载其中一个,停止下载另一个呢?
- 问题2解决方案:CPU调度是指操作系统对于多个进程的执行顺序进行管理和调度的过程。在多任务操作系统中,CPU需要在多个进程之间进行切换,以保证每个进程都能够获得一定的CPU时间片来执行任务。在下载两个文件时,通常采用的是多线程或者多进程的方式,以利用多个CPU核心或者多个线程来同时下载不同的文件。这种方式可以提高下载速度,但是不会涉及到CPU调度的问题。
基于AI的学习
- me:我在学习磁盘调度,请你以苏格拉底式对我进行提问?
- GPT-3.5:首先,你认为什么是磁盘调度?为什么需要进行磁盘调度?
- me:它是决定先满足哪个磁盘调度I/O请求的操作;不知道为什么,你觉得是为什么呢?
- GPT-3.5:在计算机系统中,磁盘调度是指操作系统对于磁盘I/O请求的管理和调度过程。它决定了磁盘驱动器在处理多个I/O请求时的执行顺序,以最大程度地提高磁盘的访问速度和性能。磁盘调度是必要的,因为在实际的计算机系统中,磁盘I/O请求往往是随机分布的,而磁盘的读写操作是顺序进行的。因此,通过合理的磁盘调度算法,可以减少磁盘头的移动次数,提高磁盘的读写效率,从而优化系统的整体性能。