快速排序和二分查找(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);
System.out.println(Arrays.toString(data));
int index = binarySearch(data, 4);
System.out.println(index);
} private static int partition(int[] data, int left, int right) {
int i = left;
int j = right;
//pivot
int pivot = data[left + (right - left) / 2];
//完成一趟排序
while (i <= j) {
//从右往左找到第一个小于pivot的数
while (data[j] > pivot) {
j--;
}
//从左往右找到第一个大于pivot的数
while (data[i] < pivot) {
i++;
}
//交换
if (i <= j) {
int p = data[i];
data[i] = data[j];
data[j] = p;
i++;
j--;
}
} return i;
} public static void quickSort(int[] data, int left, int right) { int index = partition(data, left, right); if (left < index - 1) {
quickSort(data, left, index - 1);
} if (index < right) {
quickSort(data, index, right);
}
} public static int binarySearch(int[] data, int target) {
int left = 0, right = data.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (data[mid] < target) {
left = mid + 1;
}
if (data[mid] >= target) {
right = mid - 1;
}
}
return left;
} public int binarySearchRecur(int[] data, int target, int left, int right) {
if (left > right) {
return left;
}
int mid = left + (right - left) / 2;
if (data[mid] < target) {
return binarySearchRecur(data, target, mid + 1, right);
} else {
return binarySearchRecur(data, target, left, mid - 1);
}
} }
快速排序和二分查找(Java)的更多相关文章
- golang 快速排序及二分查找
二分查找 func main() { arr := []int{0, 1, 2, 3, 4, 5, 6} fmt.Println(BinarySearch(arr, 5)) } func Binary ...
- 数据结构之二分查找——Java语言实现
场景描述:给出一个数据序列长度为N,然后查找 一个数是否在数据序列中,若是,则返回在序列中的第几个位置. 首先可能第一个想到的就是按照顺序,从前到后一个一个进行查找,直到找到为止,若最后都没有,则说明 ...
- 数据结构和算法设计专题之---二分查找(Java版)
1.前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序 2.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后:将要查找的值和数组的中值 ...
- C语言练习题1(关于快速排序,二分查找与运行时间)
刚刚完成师兄给的一道题目: 随机生成10000位数,进行快速排序后,用二分查找法定位到某个要查询的数(键盘输入某个要查询的数), 结果输出查询的时间,以及是否查到 分享下自己的解题思路: 1,要懂得 ...
- 二分查找(Java)
二分查找的前提的要查找的数组必须有序. 代码如下: 程序1 public class source { public int binary_sort(int[] array, int item) { ...
- 二分查找(Java实现)
二分查找:递归实现 public class BinarySearch { /** * @param arr 代查找的数组,需要有序 * @param left 查找区间的左界限 * @param r ...
- 二分查找-Java版
/** * * 二分查找算法 * * * * @param srcArray 有序数组 * * @param target 查找元素 * * @return srcArray数组下标,没找到返回-1 ...
- 二分查找java实现
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列. 二分查找思路非常简单,由粗暴的遍历查找改为 ...
- 二分查找java代码
public int find(long searchKey){ int i; int begin = 0; int end = nElems - 1; while(true){ i = (begin ...
随机推荐
- java中接口知识点大总结
接口的确很不好理解!!!!!那我来好好总结一下: 首先要理解接口是一个独立存在的,和类是不一样的东西,所以,直接用接口的定义是: 访问权限控制符 interface 接口名 [extends 接口列 ...
- 使用@ResponseBody输出JSON
添加jackson依赖 添加@ResponseBody 测试: 原理: 当一个处理请求的方法标记为@ResponseBody时,就说明该方法需要输出其他视图(json.xml),SpringMVC通过 ...
- wpf ActualWidth为0解决方法
LocalNewsControl() { var descriptor = DependencyPropertyDescriptor.FromProperty(ActualWidthProperty, ...
- 简单了解journalctl
journalctl 命令 journalctl是什么以及作用? journalctl 用来查询 systemd-journald 服务收集到的日志.systemd-journald 服务是 syst ...
- appium 自动化测试框架详读(一)
appium框架使用的过程记录,开始使用markdown来语法来编写,不知道博客园是否会支持markdown语法 ***1. appium原理* appium启动时,创建一个http://127.0. ...
- C语言 STL中qsort用法
qsort函数包含在<stdlib.h>的头文件里. qsort函数声明如下:void qsort(void *base, size_t nmemb, size_t size, int(* ...
- vi 必须要学会的技能
vi与vim vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器.他是我们使用Linux系统不能缺少的工具.由于对 ...
- Spring相关概念
DIP: Dependency Inversion Principle.翻译过来是依赖反转原则,也叫依赖倒置原则. 依赖倒置原则是设计模式几个重要原则之一.具体定义就是,底层模块依赖高层模块定义的接口 ...
- luogu2014 选课[树形背包][优化成$O(n^2)$的方法]
https://www.luogu.org/problemnew/show/P2014 树形背包的裸题..当版子好了. $f[i][j][k]$表示子树$i$选前$j$个孩子,共$k$个后代节点时的最 ...
- 【银川网络赛G】Factories
题目大意:给定一棵 N 个节点的树,边有边权,选定 M 个叶子节点,使得任意两个叶子节点的树上距离之和最小,求最小值是多少. 题解:任意两点的树上距离和问题应从边的贡献角度考虑. 设 \(f[u][i ...