快速排序和二分查找(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 ...
随机推荐
- ASP.NET Core[源码分析篇] - Authentication认证
原文:ASP.NET Core[源码分析篇] - Authentication认证 追本溯源,从使用开始 首先看一下我们通常是如何使用微软自带的认证,一般在Startup里面配置我们所需的依赖认证服务 ...
- 类型(Type)
A data type is homogeneous collection of values,effectiovely presented,equipped with a set of operat ...
- C#派生类的构造函数
构造函数的调用顺序是先调用System.Object,再按照层次结构由上向下(基类=>派生类)进行,直到到达编译器要实例化的类为止.在此过程中,每个构造函数都初始化自己类中的字段.编译器先自下而 ...
- Vue开发——实现吸顶效果
因为项目需求,最近开始转到微信公众号开发,接触到了Vue框架,这个效果的实现虽说是基于Vue框架下实现的,但是同样也可以借鉴到其他地方,原理都是一样的. 进入正题,先看下效果图: 其实js做这个效果还 ...
- Date对象中的方法
特殊说明:设置时间的方法,虽然W3C说明传参的范围,在开发过程中,传入的参数不在该范围也是可以的.例如: var t = new Date(), d = t.getDate(); //当天时间往前推2 ...
- Docker搭建Gitlab服务器
1.使用docker搜索gitlab镜像 docker search gitlab 2.下载镜像: docker pull docker.io/gitlab/gitlab-ce 3.查看docker镜 ...
- Eclipse中插件的运用
1. hotcode2.jar 支持java代码热部署,改了本地java代码不需要重新部署生效,可以节省开发时间,提高开发效率. 安装方法: 到help -- install new software ...
- idea中 参数没有描述报错 @param XX tag description is missing错误,去除黄色警告
最近在使用idea开发工具,在方法备注中参数没有描述报错就会报一些黄色警告: @param XX tag description is missing,下面展示去除黄色警告的方法 File--sett ...
- Delphi 控制程序的执行
- 2019-2020-1 20199319《Linux内核原理与分析》第四周作业
MenuOS的构造 基础知识 1.操作系统的两把宝剑:①中断上下文的切换:保存现场和恢复现场:②进程上下文的切换. 2.Linux内核以A.B.C.D方式命名:A和B变得无关紧要,C是内核的真实版本, ...