算法第二章上机实践报告
算法第二章上机实践报告
实践题目名称:
找第k小的数
问题描述:
设计一个平均时间为O(n)的算法,在n(1<=n<=1000)个无序的整数中找出第k小的数。
算法描述:
1. int partition(int a[],int left,int right)函数
功能是根据a[left]~a[right]中的某个元素x(如a[left])对a[left]~a[right]进行划分,划分后的x所在位置的左段全小于等于x,右段全大于等于x,同时利用x所在的位置还可以计算出x是这批数据按升非降序排列的第几个数。
2. int find(int a[],int left,int right,int k)函数
调用partition函数获得划分点,判断划分点是否第k小,若不是,递归调用find函数继续在左段或右段查找。
算法时间及空间复杂度分析(要有分析过程)
时间复杂度的分析:在这个题目中,主要运用的是递归的思想,结合快速排序法和分治法。首先通过调用partition函数(快速排序法)来实现对数组的粗略排序,但并不需要对进行排序,只需要不断的寻找下标借即可,所以所需的时间复杂度主要是O(n)。
空间复杂度分析:因为采用了递归的思想,所以空间复杂度为O(log2N)
心得体会(对本次实践收获及疑惑进行总结)
对于这次的上机实验,最大的心得就是弄懂了递归和分治法,能够更好地理解递归和分治法的含义并且能够合理运用。

浙公网安备 33010602011771号