直接插入排序的过程:先将序列第一个记录暂时作为有序子序列,从第二个开始逐个进行插入,直至整个序列有序。一趟排序将elem[i]插入到已排好序elem[0…i-1]中各元素做比较后的任何对应位置,所以未必能选出一个元素放在其最终位置上。
堆归选基与初始序列无关 快选希堆排序不稳定
3.
对于冒泡排序和选择排序,每一趟都能确定一个元素的最终位置,而题目中,前2个元素和后2个元素均不是最小或最大的2个元素并按序排列。
选项D中的2路归并排序,第一趟排序结束都可以得到若干个有序子序列,而此时的序列中并没有两两元素有序排列。
插入排序在每趟排序后能确定前面的若干元素是有序的,而此时第二趟排序后,序列的前三个元素是有序的,符合其特征。
4.
快速排序在排序的过程中,既要从后向前查找,也要从前向后查找,因此宜采用顺序存储。
顺序存储:在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,称作线性表的顺序存储结构。
链接存储:在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。
索引存储:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。索引表由若干索引项组成。
散列存储:散列存储,又称hash存储,是一种力图将数据元素的存储位置与关键码之间建立确定对应关系的查找技术。
5.
快排每一趟就是O(n),在一般情况下递归深度是log(n),所以总的复杂度是O(nlogn)。在有序的情况下,递归深度变成了n,所以总复杂度会退化到O(n*n)
6.
每次将工作区装满,共计3110400/400=7776个归并段,对于n路归并排序,m个归并段,需要归并排序的次数为lognm次,代入数据得到答案为5。
次数最少 每次让计算机内存填满400
3110400个记录要填 3110400/400 = 7776次
n路归并m 次 的次数为 n^m
6^m = 7776
m=5
归并排序(Merging Sort):是指将两个或两个以上的有序表合并成一个新的有序表。在内部排序中,通常采用的是2-路归并排序
多路归并:
关于多路归并排序的应用,有一道很经典的面试题:
意思就是:我的内存太小了,无法通过诸如快速排序这样的内部排序算法,进行数据的直接整体排序。那么为什么这个问题可以由归并算法来解决呢?
归并的时候,外存可以作为归并排序中的那片关键的额外空间,数据是可以直接写回外存的,所以不需要内存有40GB的额外空间来先存放排序完的数据,再写回外存。
其实这40GB的文件可以被拆分成20份2GB的小文件,我们只要分别对20份小文件进行排序之后,进行20路归并操作就可以了
注意:程序执行一定是在内存当中,所有的数据也都需要从辅存或者外存当中调入内存当中,才可以进行CPU的运算。一个2GB大小的内存当然无法调入40GB的数据。
还需注意的是:我们在程序中只存储了相应的文件指针,并没有将文件中的内容一次性全部读满内存,而是需要一个数据就从文件中读一个数据。
———————————————
原文链接:https://blog.csdn.net/weixin_55252589/article/details/132254616
7.
Little endian 和Big endian 是CPU 存放数据的两种不同顺序。对于整型、长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节);而Little endian 则相反,它认为第一个字节是最低位字节(按照从低地址到高地址的顺序存放数据的低位字节到高位字节)。