Ex 2_16 给定一个无穷数组..._第二次作业

先比较数组的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 给定一个无穷数组..._第二次作业的更多相关文章
- Ex 2_23 如果一个数组超过半数的元素都相同时,该数组被称为含有一个主元素..._第二次作业
将数组A划分为两个数组A1和A2 ,各含有A的一半元素或一半多一个.若A中含有主元素x,则A1和A2中至少有一个数组含有主元素x,对A1和A2递归地计算有无主元素,若A只含有一个元素,则A的主元素就是 ...
- c语言经典算法——查找一个整数数组中第二大数
题目: 实现一个函数,查找一个整数数组中第二大数. 算法思想: 设置两个变量max1和max2,用来保存最大数和第二大数,然后将数组剩余的数依次与这两个数比较,如果这个数a比max1大,则先将max1 ...
- LeetCode竞赛题:K 次取反后最大化的数组和(给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。)
给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次.(我们可以多次选择同一个索引 i.) 以这种方式修改数组后 ...
- (016)给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树(keep it up)
给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树. 因为数组是递增有序的.每次都在中间创建结点,类似二分查找的方法来间最小树. struct TreeNode { int data; Tr ...
- 作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)
题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...
- 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数
今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...
- 给定一个整数数组 nums 和一个目标值 target,求nums和为target的两个数的下表
这个是来自力扣上的一道c++算法题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案 ...
- Java -- 给定一个int数组,拼接出最大数值
public class ZhiJieTiaoDong { /* 给定一个数组:组合成最大数值 */ public String szpj(int[] args){ if(null == args | ...
- Ex 2_14 去掉数组中所有重复的元素..._第二次作业
首先利用归并排序算法对数组进行排序,时间复杂度为O(nlogn),接着再利用时间复杂度为O(n) 的去重复算法去掉数组中的重复元素.总的时间复杂度为O(nlogn). (这题应该用分支算法解决)以下为 ...
随机推荐
- 【bzoj 4764】弹飞大爷
Description 自从WC退役以来,大爷是越来越懒惰了.为了帮助他活动筋骨,也是受到了弹飞绵羊一题的启发,机房的小伙伴们决定齐心合力构造一个下面这样的序列.这个序列共有N项,每项都代表了一个小伙 ...
- postfix 邮箱接收限制
Postfix 限制 QQ 邮箱发送到 我的 test.com 域下邮箱. 1.编辑 main.cf 添加限制: smtpd_sender_restrictions = check_sender_a ...
- Web Of Science
- 最好用的 IntelliJ 插件 Top 10
最好用的 IntelliJ 插件 Top 10 https://my.oschina.net/didispace/blog/1583238
- Censys
Censys Censys持续监控互联网上所有可访问的服务器和设备,以便您可以实时搜索和分析它们,了解你的网络攻击面,发现新的威胁并评估其全球影响.从互联网领先的扫描仪ZMap的创造者来说,我们的使命 ...
- python 函数指动态形参,作用域
函数的动态形参, 作用域 一 动态形参 如果我们需要给⼀一个函数传参, ⽽而参数⼜又是不确定的. 或者我给⼀一个 函数传很多参数, 我的形参就要写很多, 很⿇麻烦, 怎么办呢. 我们可以考虑使⽤用动态 ...
- Oracle简单的序列应用
1.序列的简单作用 1.需要自增或自减一个值的时候. 2.为表中的列自动产生值. 3.由用户创建数据库对象,并可由多个用户共享. 4.一般用于主键或唯一列. 2.创建序列的语法及解析 create s ...
- Flask表单(form)的应用
导入模块request模块 #指定请求方式,使用methods属性 @app.route("/",methods=['GET','POST']) def index(): #判断c ...
- 解码base64加密的图片并打印到前台
经过base64加密的图片对象是一串字符串,我们解码后可通过流将其打印出来: utils类: package com.aebiz.app.web.modules.controllers.open.ap ...
- Mysql多实例安装笔记
参考: 系统:KaliLinux (x86_64) 软件下载 1.下载地址: 2.选择5.6版本 安装 1.准备文件和目录 tar -zxvf mysql-5.6.40-linux-glibc2.12 ...