Date: 2019-08-09
今天开启算法基础知识的复习,算法的基础知识主要包括:查找+ 排序 +递归+ 复杂度+高级算法这五部分的知识。
排序:
1. 下列各种排序算法中平均时间复杂度为O(n2)是()。D
A.快速排序(O(nlong))
B.堆排序 (O(nlong))
C.归并排序 (O(nlong))
D.冒泡排序 (O(n^2))
2. 一组记录的排序码为(46,79,56,38,40,84),一趟排序的结果为(40,38,46,56,79,84),则采用的是()排序算法。C
A.冒泡排序
B. 直接插入排序
C.快速排序
D.2-路归并排序
解释:
A选项起泡算法:相邻元素两两比较,一个元素大于右侧相邻元素交换位置,否则位置不变。
- 一趟排序为:46,56,38,40,79,84
B选项直接插入:每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。
- 一趟排序为:38,40,46,79,56,84
C选项快速:挑选一个基准元素,大于基准元素的放在其右边,小于基准元素的放在其左边,从而拆分为两部分,以此类推直到不可拆分为止。
以源数据第一个元素46为基准,采用双边循环法设置left和right两个指针指向数组最左和最右两端,从右指针开始,如果大于或等于基准元素则指针向左移动,如果小于基准元素则停止。转向left指针向右移动如果小于或等于基准元素则继续向右移动,如果大于基准元素则停止。交换两指针元素后,右指针继续上述操作比较,直到最后把基准元素和两指针重复元素交换位置。第一趟排序结束得出如下排序,所以C正确。
- 一趟排序为:40,38,46,56,79,84
D选项2-路归并:将一个数组分成两个数组,分别对两个数组进行排序,循环第一步,直到划分出来的“小数组”只包含一个元素,只有一个元素的数组默认为已经排好序
- 一趟排序为:46,56,79合并;38,40,84合并
3. 判断下列说法是否正确:归并排序是稳定的排序方法,在最坏情况下时间复杂度是0(nlogn)。( True)
4. 在一个有N个元素的有序单链表中查找具有给定关键字的结点,平均情况下的时间复杂性为(O(N))
解释: N个结点的单链表查找结点最好为1,最坏为N,平均为(N+1)/2,所以平均时间复杂度为O(N)
5. 下列排序算法中()排序在一趟结束后不一定能选出一个元素放在其最终位置上 C
A.选择
B.冒泡
C.归并
D.堆
解释:
A,选择排序每次选择一个元素放在其最终位置,直道序列有序为止
B,冒泡排序每一趟都将子序列中最小的元素放在子序列的首位,也就是元素的最终位置
D,