算法分析第二章答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章
来自百度文库
2-2下面的7个算法与本章中的二分搜索算法BinarySearch略有不同。请 判断这7个算法的正确性。如果算法不正确,请说明产生错误的原因。 如果算法正确,请给出算法的正确性证明。
public static int BinarySearch(int[] a, int x) { int left=0;
int right=n-1 while (left<=right){
int middle = (left+right)/2; if (x == a[middle]) return middle; if (x < a[middle]) right = middle-1;
else left = middle+1; } return -1; //未找到x }
算法1 public static int BinarySearch1(int[ ] a, int x, int n) {
int left=0; int right=n-1; while (left <= right){
int middle = (left+right)/2; if (x == a[middle]) return middle; if (x > a[middle]) left = middle; (middle+1) else right = middle; (middle-1) } return -1; }
算法2; public static int BinarySearch2(int[] a, int x, int n) {
int left=0; int right=n-1; while (left < right-1){ (left < =right)
int middle = (left+right)/2; if (x < a[middle]) right = middle; (middle-1) else left = middle; (middle+1) } if (x == a[left]) return left; return -1; }
else left = middle;
算法4: public static int BinarySearch4(int [ ] a, int x, int n) {
if(n>0 && x>=a[0]){ int left=0; int right=n-1; while (left < right){ int middle = (left+right)/2; if (x < a[middle]) right = middle-1; else left = middle; } if (x == a[left]) return left;
不正确。与主教材中的算法Binary Search相比,数组段左、右游标left和 right调整不正确,导致陷入死循环。 如:序列2 3 4 5,x=5时, left=0,right=3,mid=1,x>a[1]=3,left=1 left=1,right=3,mid=2,x>a[2]=4,left=2 left=2,right=3,mid=2,x>a[2]=4,left=2 left=2,right=3,mid=2,x>a[2]=4,left=2 陷入死循环
算法5: public static int BinarySearch5(int [ ] a, int x, int n)
} return -1; }
不正确。与(5)相比,数组段左、右游标left和right调整不正确,导致 陷入死循环。 如:序列2 3 4 5,x=5时, left=0,right=3,mid=1,x>a[1]=3,left=1 left=1,right=3,mid=2,x>a[2]=4,left=2 left=2,right=3,mid=2,x>a[2]=4,left=2 left=2,right=3,mid=2,x>a[2]=4,left=2 陷入死循环
又如:序列 2 3 4 5,x=1时 left=0,right=3,mid=1,x<a[1]=3,right=1 left=0,right=1,mid=0,x<a[0]=2, right=0 left=0,right=0,mid=0,x<a[0]=2, right=0 left=0,right=0,mid=0,x<a[0]=2, right=0 陷入死循环。
算法3
public static int BinarySearch3(int [ ] a, int x, int n)
{ int left=0; int right=n-1; while (left +1!= right){ int middle = (left+right)/2; if (x >= a[middle]) left = middle; else right = middle; } if (x == a[left]) return left; return -1;
}
同(2),不正确。 (3)中while (left +1!= right) 等同于(2)的while (left < right-1) (3)中if (x >= a[middle]) left = middle;
else right = middle; 等同于(2)的 if (x < a[middle]) right = middle;
不正确。与主教材中的算法Binary Search相比,数组 段左、右游标left和right调整不正确,导致x=a[n-1]时 返回错误结果。
如:序列2 3 4 5,x=5时,
left=0,right=3,mid=1,x>a[1]=3,left=1
left=1,right=3,mid=2,x>a[2]=4,left=2 left=2,right-1=2,while循环结束 5==a[2]不为真 故return -1; 返回-1表示找不到x,这是一个错误的结论!
相关文档
最新文档