文章目录
- 1.算法
- 2.线性表和链表
- 3.栈和队列
- 4.数组和广义表
- 5.树
- 6.图
- 7.查找
- 8.排序
1.算法
算法的特点:有穷性,确定性,可行性,输入,输出。
2.线性表和链表
3.栈和队列
4.数组和广义表
5.树
6.图
7.查找
1、若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为( )。
A. 1,2,3
B. 9,5,2,3
C. 9,5,3
D. 9,4,2,3
解析:
mid = |(low+high)/2|,向下取整,如9.5取9。
第一次:left = 1 right = 18 ,则:mid = 9 (向下取整)
第二次:left = 1 right = 8(mid-1),则:mid = 4 (向下取整)
第三次:left = 1 right = 3(mid-1),则:mid = 2
第四次:left = 3 (mid+1) right = 3 mid = 3。答案选D。
2、假定一个线性表为(12,23,74,55,63,40),若按Key % 4条件进行划分,使得同一余数的元素成为一个子表,则得到的四个子表分别为 (12 , 40 )、(23,55, 63)、(74)和( )。
解析:
余数为0:12%4=0, 40%4=0
余数为2:74%4=2
余数为3:23%4=3, 55%4=3, 63%4=3
3、设一组有序的记录关键字序列为(13,18,24,35,47,50,62,83,90),查找方法用二分查找,要求计算出查找关键字62时的比较次数并计算出查找成功时的平均查找长度。
解析:其计算过程如下图所示。
答案:2,ASL = (1 * 1 + 2 * 2 + 3 * 4 + 4 * 2) / 9 = 25/9。
4、设二叉排序树中有n个结点,则在二叉排序树的平均查找长度为( )。
答案:O(log2n)
5、设查找表中有100个元素,如果用二分法查找方法查找数据元素X,则最多需要比较________次就可以断定数据元素X是否在查找表中。
答案:7
解析:log2100=7,2的7次方为128。
6、下列算法实现在顺序散列表中查找值为k的关键字,请在下划线处填上正确的语句。
struct record{int key; int others;};
int hashsqsearch(struct record hashtable[ ],int k)
{
int i,j; j=i=k % p;
while (hashtable[j].key!=k&&hashtable[j].flag!=0){
j=(____) %m; if (i==j) return(-1);
}
if (_______________________ ) return(j); else return(-1);
}
答案:j+1,hashtable[j].keyk
(由于返回 j 表示该下标的存储的值为k,故第二个空为 hashtable[j].keyk)
7、设有序顺序表中有n个数据元素,则利用二分查找法查找数据元素X的最多比较次数不超过( )。
A.log2n+1 B.log2n-1 C.log2n D.log2(n+1)
答案:A,折半查找为log2n+1(最后一个元素的比较)。
8、设散列函数H(k)=k mod p,解决冲突的方法为链地址法。要求在下列算法划线处填上正确的语句完成在散列表hashtalbe中查找关键字值等于k的结点,成功时返回指向关键字的指针,不成功时返回标志0。
typedef struct node {int key; struct node *next;} lklist;
void createlkhash(lklist *hashtable[ ])
{
int i,k; lklist *s;
for(i=0;i<m;i++) _____________________;
for(i=0;i<n;i++)
{
s=(lklist *)malloc(sizeof(lklist)); s->key=a[i];
k=a[i] % p; s->next=hashtable[k]; _______________________;
}
}
答案:hashtable[i]=0,hashtable[k]=s
8.排序
1、对n个记录的文件进行快速排序,所需要的辅助存储空间大致为:O(log2n)
解析:
辅助空间中快速排序为O(log2n),归并排序为O(n),基数排序为O(rd+n),其他排序为O(1)。
2、在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为________,整个堆排序过程的时间复杂度为________。
解析:
堆排序的时间复杂度为O(nlog2n),则每个分支的时间复杂度为O(log2n)。
答案:O(log2n),O(nlog2n)。
3、在快速排序、堆排序、归并排序中, 归并 排序是稳定的。
解析:
稳定排序:直接插入排序、冒泡排序、归并排序、基数排序
不稳定排序:希尔排序、直接选择排序、堆排序、快速排序
4、设一组初始记录关键字序列(5,2,6,3,8),以第一个记录关键字5为基准进行一趟快速排序的结果为( 3,2,5,6,8 )。
解析:
快速排序5为基准,基本规则如下:left=3,right=8,先遍历right,寻找比基准5小的数字左移;找到之后与左边left下标替换,接着left向右移动,寻找比基准5大的数字,找到之后替换,最后left=right时,该数字与基准替换。
初始:5 2 6 3 8,right寻找到3,与left=5交换位置
接着:3 2 6 () 8,left从左边移动,找到6,与()替换位置
接着:3 2 () 6 8,此时向左移动right,right=left,停止快速排序,并用()替换基准5。
输出:3 2 5 6 8,其为第一趟快速排序的结果。
5、为了能有效地应用HASH查找技术,必须解决的两个问题是____________和_________。
答案:构造一个好的HASH函数,确定解决冲突的方法。
6、快速排序的最坏时间复杂度为___________,平均时间复杂度为__________。
答案:O(n2),O(nlog2n)
7、设一组初始记录关键字序列为(55,63,44,38,75,80,31,56),则利用筛选法建立的初始堆为___________________________。
答案:(31,38,54,56,75,80,55,63)
8、设有n个待排序的记录关键字,则在堆排序中需要( 1 )个辅助记录单元。
9、设一组初始关键字记录关键字为(20,15,14,18,21,36,40,10),则以20为基准记录的一趟快速排序结束后的结果为( )。
A.10,15,14,18,20,36,40,21
B.10,15,14,18,20,40,36,21
C.10,15,14,20,18,40,36,2l
D.10,15,14,18,20,36,40,21
解析:快排如下
20,15,14,18,21,36,40,10 => 右边开始,找到小于20的10,交换次序
10, 15,14,18,21,36,40,() => 左边继续,找到大于20的21,交换次序
10,15,14,18,(),36,40,21 => 右边继续找小于20的数字,找到()处停止
10,15,14,18,20,36,40,21 => 输出第一趟快速排序结果,故选D。
10、设有5000个待排序的记录关键字,如果需要用最快的方法选出其中最小的10个记录关键字,则用下列( 堆排序 )方法可以达到此目的。
11、设一组初始记录关键字为(72,73,71,23,94,16,5),则以记录关键字72为基准的一趟快速排序结果为___________________________。
答案:(5,16,71,23,72,94,73)
该题方法和前面一样,请同学们自行尝试。
72 73 71 23 94 16 05
05 73 71 23 94 16 ( )
05 ( ) 71 23 94 16 73
05 16 71 23 94 ( ) 73
05 16 71 23 ( ) 94 73
05 16 71 23 72 94 73
12、设一组初始记录关键字序列为(345,253,674,924,627),则用基数排序需要进行( )趟的分配和回收才能使得初始关键字序列变成有序序列。
答案:3
个位、十位、百位共三趟。
13、设有n个无序的记录关键字,则直接插入排序的时间复杂度为________,快速排序的平均时间复杂度为_________。
答案:O(n2),O(nlog2n)
14、设初始记录关键字序列为(K1,K2,…,Kn),则用筛选法思想建堆必须从第______个元素开始进行筛选。
答案:n/2
15、设一组初始记录关键字序列为(20,18,22,16,30,19),则以20为中轴的一趟快速排序结果为______________________________。
答案:(19,18,16,20,30,22)
16、设一组初始记录关键字序列为(20,18,22,16,30,19),则根据这些初始关键字序列建成的初始堆为________________________。
答案:(16,18,19,20,30,22)