第二章上机实践报告

实践题目

改写二分搜索算法:

问题描述:设a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。

算法描述:算法在二分法算法的基础上添加特殊情况的算法,1.数值在数组中找到,则直接输出 2.若数值不在范围内,则x<a[0]时,输出为-1和0,x>a[n-1],输出为n-1和n 3.若数值在范围内但不存在该 数值,则判断数值x与middle指向的数值进行比较,若x大,则在middle与n-1之间,所以输出为middle和middle+1,若x小,同理,输出为middel-1和middle.

算法时间及空间复杂的分析

与二分法时间复杂度一样,运用循环将问题分为n/2;划分问题middle=(right+left)/2 时间为O(1),问题规模变为T(n/2),所以T(n)=T(n/2)+O(1),所以时间复杂度为O(nlog2n),因为没调用辅助空间,所以空间复杂度为O(1)

心得体会

在编写二分法的基础上进行修改的过程中,出现数值判断范围的混乱或者遗漏,以及输出的值错误,所以在编程过程中要注意好数值范围的划分。

posted @ 2018-10-21 17:27  luzhibin  阅读(131)  评论(0)    收藏  举报