快速排序和二分查找(Java)】的更多相关文章

import java.util.Arrays; public class Main { public static void main(String[] args) { int[] data = {2, 3, 5, 1, 4, 5, 2, 13, 51, 9, 10, 15, 17, 6, 21, 33, 44, 77, 22}; System.out.println(Arrays.toString(data)); quickSort(data, 0, data.length - 1); Sy…
二分查找 func main() { arr := []int{0, 1, 2, 3, 4, 5, 6} fmt.Println(BinarySearch(arr, 5)) } func BinarySearch(s []int, k int) int { lo, hi := 0, len(s)-1 for lo <= hi { m := (lo + hi) >> 1 if s[m] < k { lo = m + 1 } else if s[m] > k { hi = m -…
场景描述:给出一个数据序列长度为N,然后查找 一个数是否在数据序列中,若是,则返回在序列中的第几个位置. 首先可能第一个想到的就是按照顺序,从前到后一个一个进行查找,直到找到为止,若最后都没有,则说明待查找的数据不在数据序列中 顺序查找说明: 优点:实现简单,直接一个一个遍历判断即可 缺点:当数据是有序,并且数据不在数据序列中时,会查询N次才能确定数据不在数据序列中,查询次数较高,效率低. 针对有序的数据序列,可以从中间开始进行比较,因为是有序的,若中间值比目标值小,则目标值一定在前半部分序列或…
1.前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序 2.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后:将要查找的值和数组的中值进行比较,若小于中值则在中值前面找,若大于中值则在中值后面找,等于中值时直接返回.然后依次是一个递归过程,将前半部分或者后半部分继续分解为三部分.可能描述得不是很清楚,若是不理解可以去网上找.从描述上就可以看出这个算法适合用递归来实现,可以用递归的都可以用循环来实现.所以我们的实现分为递归和循环两种…
刚刚完成师兄给的一道题目: 随机生成10000位数,进行快速排序后,用二分查找法定位到某个要查询的数(键盘输入某个要查询的数),  结果输出查询的时间,以及是否查到 分享下自己的解题思路: 1,要懂得如何随机生成数 2,要了解快速排序以及二分法思想 3,要直到如何测试出程序运行时间 下面是自己写的代码,欢迎各位提出宝贵的意见以及见解,小生感激不尽 1 /* 2 本代码描述: 3 4 随机生成10000位数,进行快速排序后, 5 用二分查找法定位到某个要查询的数 6 (键盘输入某个要查询的数),…
二分查找的前提的要查找的数组必须有序. 代码如下: 程序1 public class source { public int binary_sort(int[] array, int item) { int len = array.length; int min = 0; //定义查找范围的开始 int max = len - 1; //定义查找范围的结尾 while(max > min) { //这里不能等于,不然可能死循环 if(array[min+(max-min)/2] == item)…
二分查找:递归实现 public class BinarySearch { /** * @param arr 代查找的数组,需要有序 * @param left 查找区间的左界限 * @param right 查找区间的右界限 * @param target 待查找的值 * @param <T> 泛型 * @return <p>在arr中[left...right]左闭右闭区间查找target, 找到了就返回该下角标,没找到则返回-1.<p/> */ public st…
/** * * 二分查找算法 * * * * @param srcArray 有序数组 * * @param target 查找元素 * * @return srcArray数组下标,没找到返回-1 */ public int binarySearch(int[] srcArray, int target){ int left = 0; int right = srcArray.length - 1; while(left <= right) { int mid = left + (right…
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列. 二分查找思路非常简单,由粗暴的遍历查找改为了将元素排序后不断的进行折半查找,将搜索的时间复杂度由O(N)降到了O(log2N). 二分查找的思路与二叉查找树的查找过程完全相同,我们将一个经过排序的数组看做一棵平衡的二叉查找树,那么数组的中点便是树的根节点.折半后的中点是下一层子树的根节点,以此类推.我们通过不断的判断目标值与各树根节点的值的…
public int find(long searchKey){ int i; int begin = 0; int end = nElems - 1; while(true){ i = (begin + end) / 2; if (searchKey == a[i]){ return i; } else if (begin > end) { return -1; } else if (searchKey > a[i]) { begin = i + 1; } else if (searchKe…