算法第二章上机实践报告

算法第二章上机实践报告

 

 


 

实践题目名称:

  找第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)

 

心得体会(对本次实践收获及疑惑进行总结)

   对于这次的上机实验,最大的心得就是弄懂了递归和分治法,能够更好地理解递归和分治法的含义并且能够合理运用。

 

posted @ 2020-10-03 13:02  邹桦骏  阅读(203)  评论(0)    收藏  举报