java实现排序和二分查找_快速排序和二分查找(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);

}

}

}

golang 快速排序及二分查找

二分查找 func main() { arr := []int{0, 1, 2, 3, 4, 5, 6} fmt.Println(BinarySearch(arr, 5)) } func Binary ...

数据结构之二分查找——Java语言实现

场景描述:给出一个数据序列长度为N,然后查找 一个数是否在数据序列中,若是,则返回在序列中的第几个位置. 首先可能第一个想到的就是按照顺序,从前到后一个一个进行查找,直到找到为止,若最后都没有,则说明 ...

数据结构和算法设计专题之---二分查找&lpar;Java版&rpar;

1.前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序 2.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后:将要查找的值和数组的中值 ...

二分查找&lpar;Java&rpar;

二分查找的前提的要查找的数组必须有序. 代码如下: 程序1 public class source { public int binary_sort(int[] array, int item) { ...

二分查找&lpar;Java实现&rpar;

二分查找:递归实现 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 ...

快速排序和二分查找&lpar;Javascript&rpar;

var data = [8, 3, 4, 1, 18, 22, 11, 3, 5, 6, 2, 1, 77] quickSort(data, 0, data.length - 1) console.l ...

随机推荐

移动开发中使用Onsen UI的笔记

onsen var m_index = ons.bootstrap() 初始化框架 m_index 赋值 增加对象. m_index.value('getUser',{ // user:window. ...

jQuery基础选择器

attr()方法的功能是设置或获取元素的某项属性值. attr("disabled", "true”)表示使该功能不可用. #id 选择器 $("#my_id& ...

WPF随手小记之二 ——改变DataGrid样式

大部分时候我们并不需要手动改变DataGrid的样式,因为用默认的其实也看得过去,而且在DataGrid中的数据也远比外观重要. 但总有时候,我们需要做点必要的UI修改来使DataGrid更美观. 一 ...

jQuery 遍历 – 过滤

缩小搜索元素的范围 三个最基本的过滤方法是:first(), last() 和 eq(),它们允许您基于其在一组元素中的位置来选择一个特定的元素. 其他过滤方法,比如 filter() 和 not() ...

从零开始学安全&lpar;十四&rpar;●Windows Server 2012 R2 本地搭建FTP服务器

打开仪表盘添加角色和功能向导 下一步 等待安装完成 打开iis 新建站点 点击 选一个目录作为 ftp文件服务器的存储路径 后面就和iis 创建站点一样了 匿名就不需要密码 就可以访问基本需要特定的账 ...

to&lowbar;date

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'; 会话已更改. SQL> SELECT TO_DATE(' ...

2&period;12 C&plus;&plus; explicit关键字详解

参考:http://www.cnblogs.com/ymy124/p/3632634.html 总结: 带参数的构造函数中有两种比较常见的构造函数:拷贝构造函数和转型构造函数. 转型构造函数只有一个参 ...

14&period; js字符串截取substring用法

columnIds = columnIds.substring(0, columnIds.length-1);

IOS网络篇1之截取本地URL请求&lpar;NSURLProtocol&rpar;

本文转载至 http://blog.csdn.net/u014011807/article/details/39894247 NSURLProtocol 是iOS中非常重要的一个部分,我们经常会在以下 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值