码迷,mamicode.com
首页 > 编程语言 > 详细

算法第二章上机实践报告

时间:2018-10-21 21:58:58      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:arc   停止   print   while   查找   method   存在   大致   问题   

1.实践题目:7-1 二分查找

2.问题描述:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。

3.算法描述:

将n个元素分成个数大致相同的两份,取a[n/2]与x比较。

若x==a[n/2],程序停止,输出下标,

若x<a[n/2],在数组a的左半部查找x,

若x>a[n/2],在数组a的右半部查找x,

若x不存在,输出-1

4.算法时间及空间复杂度分析

代码:

import java.util.Scanner;
public class Main {
		public static void main(String[] args) {
			// TODO Auto-generated method stub
			Scanner input = new Scanner(System.in);
			int n = input.nextInt();
			int [] list1 = new int[n];
			for(int i=0;i<n;i++){
				list1[i] = input.nextInt();
			}
			int x = input.nextInt();
			Binary_Search(list1,x,0,n-1,0);
		}
		public static void Binary_Search(int[] a,int x,int left,int right,int num){
			
			while(left<=right){
			  num++;
				int middle = (left+right)/2;
				if(x==a[middle]){
					System.out.println(middle);
					System.out.print(num);
					break;
				}
				else if(x<a[middle]){
					right = middle-1;
				}
				else {
					left = middle+1;
				}
				
			}
			if(left>right){
			System.out.println(-1);
			System.out.print(num);
			}
		}
	}

  在最坏情况下,while循环被执行了O(logn)次(2为底,下同),计数器num的时间负责度为O(1)。循环体内运算需要O(1)时间,所以整个算法在最坏情况下的计算时间复杂性为O(logn)。

因为没有使用递归,使用的空间都为常数级,所以空间复杂度为O(1)。

5.心得体会

一开始对于计数器num放在哪里是不确定的,后来跟搭档讨论后决定放在while里面判断之前,这样每次判断就属于比较一次,可以记录下比较次数。跟同学讨论,确实能比自己埋头苦想更快想出解决办法。

算法第二章上机实践报告

标签:arc   停止   print   while   查找   method   存在   大致   问题   

原文地址:https://www.cnblogs.com/lasia/p/9826734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!