先比较数组的A[0]元素,若不相等接下来比较A[1],A[2],A[4],A[8]…,若找到一个区间A[2n-1]<x<A[2n],再对这个区间进行折半查找操作。总的时间为O(logn)。

若查找过程中A[i]中的i>n,则抛出异常

 package org.xiu68.ch02.ex2;

 import java.util.Random;
import java.util.Scanner; public class Ex2_16 {
public static final int ARR_MAX=1000000;
//public static final int MIN=10000;
public static void main(String[] args) {
//无穷数组,前n个元素为整数且已排好序,n未知,剩下为无穷大,输入整数x,找到元素等于x的
//位置(如果存在) //随机生成一个整数介于0~1000000之间作为数组中整数的长度,数组的长度为1000000。 Random r=new Random();
//int intLength=r.nextInt(ARR_MAX)%(ARR_MAX-MIN+1)+MIN;
int intLength=r.nextInt(ARR_MAX);
//构造一个数组,前n个元素为整数,剩下的为无穷大
int[] arr=new int[ARR_MAX];
for(int i=0;i<intLength;i++)
arr[i]=r.nextInt(ARR_MAX); for(int i=intLength;i<arr.length;i++)
arr[i]=Integer.MAX_VALUE; //对整数部分进行排序
quitSort(arr, 0, intLength); //输入一个整数
while(true){
Scanner sc=new Scanner(System.in);
System.out.println("输入一个整数:");
int x=sc.nextInt();
int result=search(arr,x,intLength);
if(result==-1)
System.out.println("不存在该值");
else
System.out.println("位置为:"+result); }
} //查找,确定一个范围,然后进行折半查找
public static int search(int[] r,int k,int intLength){
if(r[0]==k)
return 0;
else{
int t=r[1];
int i=1; while(t<k){
try{
i=i*2;
t=r[i];
}catch(ArrayIndexOutOfBoundsException e){ //数组A[i]满足i>n
System.out.println("数组越界");
return -1;
} }
return biSearch(r, i/2, i, k);
} } //快速排序划分算法
public static int partition(int[] r,int i,int j){
int temp=r[i];
while(i<j){
while(i<j && r[j]>=temp) //从j向前找比temp小的值
j--; if(i<j)
r[i++]=r[j]; //将j指向的值移到i的位置,i往后移一个位置 while(i<j && r[i]<temp) //从i向后找比temp大的值
i++; if(i<j)
r[j--]=r[i];
} r[i]=temp;
return i;
}
//快速排序算法
public static void quitSort(int[] r, int i,int j){
if(i<j){
int middle=partition(r, i, j);
quitSort(r, i, middle-1);
quitSort(r, middle+1, j);
}
} //折半查找算法
public static int biSearch(int[] r,int start,int end,int k){
if(start>end)
return -1;
else{
int mid=(start+end)/2;
if(r[mid]==k)
return mid;
else
if(r[mid]<k)
return biSearch(r,mid+1,end,k);
else
return biSearch(r,start,mid-1,k);
}
}
}

Ex 2_16 给定一个无穷数组..._第二次作业的更多相关文章

  1. Ex 2_23 如果一个数组超过半数的元素都相同时,该数组被称为含有一个主元素..._第二次作业

    将数组A划分为两个数组A1和A2 ,各含有A的一半元素或一半多一个.若A中含有主元素x,则A1和A2中至少有一个数组含有主元素x,对A1和A2递归地计算有无主元素,若A只含有一个元素,则A的主元素就是 ...

  2. c语言经典算法——查找一个整数数组中第二大数

    题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1 ...

  3. LeetCode竞赛题:K 次取反后最大化的数组和(给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。)

    给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次.(我们可以多次选择同一个索引 i.) 以这种方式修改数组后 ...

  4. (016)给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树(keep it up)

    给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树. 因为数组是递增有序的.每次都在中间创建结点,类似二分查找的方法来间最小树. struct TreeNode { int data; Tr ...

  5. 作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)

    题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...

  6. 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数

    今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...

  7. 给定一个整数数组 nums 和一个目标值 target,求nums和为target的两个数的下表

    这个是来自力扣上的一道c++算法题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案 ...

  8. Java -- 给定一个int数组,拼接出最大数值

    public class ZhiJieTiaoDong { /* 给定一个数组:组合成最大数值 */ public String szpj(int[] args){ if(null == args | ...

  9. Ex 2_14 去掉数组中所有重复的元素..._第二次作业

    首先利用归并排序算法对数组进行排序,时间复杂度为O(nlogn),接着再利用时间复杂度为O(n) 的去重复算法去掉数组中的重复元素.总的时间复杂度为O(nlogn). (这题应该用分支算法解决)以下为 ...

随机推荐

  1. 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、Git/SVN)

    一. 各类概念和指令介绍 1. NVM (1).  全称:Node Version Manager,是一款针对Nodejs的版本管理工具,由于Node的版本很多,很多时候我要需要依赖多个版本,并且要求 ...

  2. Echarts地图悬浮框显示多组series数据以及修改地图大小

    1.如何让echarts的地图悬浮框出现多组series数据? 2.如何更改地图默认的大小? <!DOCTYPE html> <html lang="en"> ...

  3. TCP时间获取程序

    一.服务器程序 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <sys/ ...

  4. 开发mis系统需要的技术

    一.b/s架构 b/s架构:就broser/server,浏览器/服务器的说法.服务器端要运行tomcat,提供链接数据库服务供java代码读写数据,这个可以在eclipse中配置运行.浏览器则解释j ...

  5. asp.net mvc5 多语言应用

    需求:有些网站需要多语言显示,比如简体中文,繁体中文,英文. 1.创建一个mvc项目: 2.创建App_GlobalResources 创建了中文.英文两个语言的资源文件,中文是程序的默认语言,所以我 ...

  6. 第21月第6天 zhihu如何用3个月零基础入门机器学习

    1. 我们应该记住,既成的事实一定有它的道理,如果我们不能理解它,恐怕得从自身找原因.如果你交易股票,请记住,如果预测和市场不一致,错的是预测,而不是市场 https://www.cnblogs.co ...

  7. 贝叶斯网络与LDA

    一.一些概念 互信息: 两个随机变量x和Y的互信息,定义X, Y的联合分布和独立分布乘积的相对熵. 贝叶斯公式: 贝叶斯带来的思考: 给定某些样本D,在这些样本中计算某结论出现的概率,即 给定样本D ...

  8. SQLQueryStress

    工具介绍及使用链接:http://www.cnblogs.com/lyhabc/p/3187922.html 工具下载链接:http://files.cnblogs.com/files/coce/sq ...

  9. java包装类型的坑

    开发中有遇到Long类型比较是否相等,比如Long A和Long B判断是否相等,当时习惯性的直接A==B: 自测的话确实么有问题,但是测试那边测试就有问题,当时郁闷了一下然后换成了A.equals( ...

  10. Django REST framework 第一章 Serialization

    此章节将会介绍多种构成REST framework的重要模块,在每个部分如何一起配合上提供一个综合的全方面的了解. 准备 同样的创建一个新项目,创建一个新的app,将rest_framework跟新建 ...