数组拷贝,二分法查找

Arrays.copyOfRange(int[] arr,int开始下标,int结束下标)//左闭右开
System.arraycopy(int[] source,int开始下标,int[] dest,int开始下标,int拷贝多少个)

这里是手动拷贝:
public static int[] copyOf(int[] original, int newLength) {
int[] dest = new int[newLength];
int length = original.length <= newLength ? original.length : newLength;
for (int i = 0; i < length; i++) {
dest[i] = original[i];
}

return dest;
}

mid作为分水岭, 不断地缩小范围
// 前提需要数组是有序的
public static int binarySearch(int[] a, int v) {
int left = 0;
int right = a.length;

while (left < right) {
int mid = (left + right) / 2;
if (v == a[mid]) {
return mid;
} else if (v < a[mid]) {
right = mid;
} else {
left = mid + 1;
}
}

return -1;
}

public static int binarySearch2(int[] a, int v) {
int left = 0;
int right = a.length - 1;

while (left <= right) {
int mid = (left + right) / 2;
if (v == a[mid]) {
return mid;
} else if (v < a[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
}

return -1;
}

原文地址:https://blog.51cto.com/14232658/2441978

时间: 2024-10-14 13:54:03

数组拷贝,二分法查找的相关文章

在数组中使用二分法查找

package com.db2; import java.util.Arrays; /** * 二分法查找 * * @author denny 使用二分法查找的前提数组已经排过序 * */ public class Demo4 { public static void main(String[] args) { int[] arr = { 3, 1, 8, 2, 9, 100, 33, 22, 11, 18, 14, 17, 15, 3 }; // 使用Arrays.sort()排序 Array

二分法查找(数组元素无序)

问题描述: 一数组,含有一堆无序数据,首先将数据按顺序排列,再用二分法实现某个元素的查找,若找到,返回该元素在数组中的下表,否则,返回不存在提示信息. #include<stdio.h> #include<stdlib.h> int *bubble_sort(int a[],int n)//冒泡排序(将数据升序排列) { int i; int j; int tmp; for(j=0;j<n-1;++j)//n个元素需要排序n-1趟 { for(i=0;i<n-j-1;+

用最小的内存和二分法查找数组中是否存在这个数

package Test; public class Test { //用最小的内存查找数组中是否存在这个数 public static void main(String[] args) { int [] arr = {12,2,3,4,5,6,7,8,90,76,43}; byte[] byt = new byte[100]; for (int i = 0; i < arr.length; i++) { byt[arr[i]] = 1; } int n = 13; if(byt[n] == 1

二分法查找(数组)php

二分查找法需要数组是一个有序的数组 假设我们的数组是一个递增的数组,首先我们需要找到数组的中间位置. 一.要知道中间位置就需要知道起始位置和结束位置,然后取出中间位置的值来和我们的值做对比. 二.如果中间值大于我们的给定值,说明我们的值在中间位置之前,此时需要再次二分,因为在中间之前,所以我们需要变的值是结束位置的值,此时结束位置的值应该是我们此时的中间位置. 三.反之,如果中间值小于我们给定的值,那么说明给定值在中间位置之后,此时需要再次将后一部分的值进行二分,因为在中间值之后,所以我们需要改

#C语言#二分法查找有序数组

C语言的二分法,想必很多朋友都在初学时是一个难啃的骨头,因为这是必须掌握的最基础的一种算法.在这里我分享一下这个简单的#二分法#查找有序数组 #include<stdio.h> int binary_search(int arr[],int key, int left, int right) { while (left <= right) { int mid = left + (right - left) / 2; if (a[mid]<key) { left = mid + 1;

JavaSE语言基础之数组二分法查找

一.概念: 算法:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的. 基本思想:假设数据是按升序排序的,对于给定值key,从序列的中间位置k开始比较, 如果当前位置arr[k]值等于key,则查找成功: 若key小于当前位置值arr[k],则在数列的前半段中查找,arr[low,mid-1]: 若key大于当前位置值arr[k],则在数列的后半段中继续查找arr[mid+1,high], 直到找到为止,时间复杂度:O(log(n)).(摘自百度百科) 二.代码 int[] arr

数组拷贝、数组函数、通过数组函数来模拟数据结构的栈和队列、回调的意义、数组函数的排序问题、算法以及寻找素数的筛选法

1.数组的拷贝数组拷贝时指针的指向问题. 数组在拷贝时,指针的位置随之复制[这一点拷贝是完全一样]但是如果拷贝的数组的指针是非法的,那么拷贝出新指针的位置进行初始化<?php$arr1=array('123');end($arr1);next($arr1);//这个指针非法$arr2 = $arr1;//这里进行数组的拷贝var_dump(current($arr2));//得到指向‘123’元素的指针var_dump(current($arr1));//此时这个数组的指针有问题?> 但是拷贝

java的二分法查找数据

Java二分法查找的源代码:    二分查找是一种高效率线性表的查找算法.在查找时必须将线性表中的关键词排好序.基本思路是:先断定线性表的中心方位 mid=(first+last)/2:对比所要查找的关键词 key与中心方位的关键词的巨细,假如比key和mid.key持平则回来: key比mid.key大(假定为升序)这所要查找的关键词在mid和last之间:否则在first与mid之间.持续按照上面办法查找中心元素,直到找到为止.    详细完成如下package com.cgogo; /**

数组排序 和 二分法查找

二分法查找 当数据量很大适宜采用该方法.采用二分法查找时,数据需是有序不重复的. 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功:若 x 小于当前位置值,则在数列的前半段中查找:若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止. 假设有一个数组 {5,4,2, 67, 77, 89, 90,4,9,1,12, 23, 34, 45, 56 },现要求采用二分法找出指定的数值并将其在数组的索引返回,如果没有找到则返回 -

JavaScript用二分法查找数据等

//二分法查数据 var arr=[41,43,45,53,44,95,23]; var b=44; var min=0; var max=arr.length; for(var i=1;i<arr.length;i++){ //外层循环控制排序的次数 for(var j=0;j<arr.length-i;j++){//内层循环控制循环的个数 if(arr[j]<arr[j+1]){ z=arr[j]; arr[j]=arr[j+1]; arr[j+1]=z; } } } // aler