Java:冒泡排序 | 二分查找
2018-10-29 20:16:46
冒泡排序
例子(对数字排序):
假设有这样一组数字:32, 8, 128, 2, 64
现在对其进行冒泡排序(*表示下次比较的开始数字):
32>8? ture: 将32和8调换位置 8, 32*, 128, 2, 64;
32>128? false:保持原位置不动 8, 32, 128*, 2, 64;
128>2 ? true: 将128和2调换位置 8, 32, 2, 128*, 64;
128>64 ? true:将128和64调换位置 8, 32, 2, 64, 128*;
经过以上步骤,最大数128浮出水面。
现在找出剩余数字 8, 32, 2, 64 中的最大数:
8>32? false: 保持原位置不动 8, 32*, 2, 64;
32>2 ? ture: 将32和2调换位置 8, 2, 32*, 64;
32>64? false: 保持原位置不动 8, 2, 32, 64*;
经过以上步骤,最大数64浮出水面。
...
由此一步步比较,即可得到排序后的结果: 2, 8, 32, 64, 128
程序实现如下:
//形式参数intArr表示要排序的数组
public static int[] bubbleSort(int[] intArr) { if (intArr == null) return null; // 当传进来的数组为null时返回null int len = intArr.length; // 定义len表示数组的长度 if (len < 2) return intArr; // 当数组长度小于2时直接返回该数组,此时无需排序 while (len > 1) { for (int i = 0; i < len - 1; i++) { // if语句表示如果前一个数大于后一个数,则交换位置,否则什么也不做 if (intArr[i] > intArr[i + 1]) { int temp = intArr[i]; intArr[i] = intArr[i + 1]; intArr[i + 1] = temp; } } len -= 1; // 经过一个循环的比较,已经得出了本次循环的最大值,把它放在索引最大处,接下来比较除最大索引处之外的数的最大值,依次循环... } return intArr; }
二分查找
例子(对上述排序好的数字进行查找):
有如下排序好的数字:2, 8, 32, 64, 128
索引值分别为 0, 1, 2, 3, 4
如何查找数字 2 的索引呢?
取中间索引 2 处的值 32 , 32<2 ? false,说明数值2的索引在索引2的前面;
取索引0和索引2的中间索引值1,索引1处的值为8, 8<2 ? false,说明数值2的索引在索引1的前面;
...
依次取值比较即可得到数值2的索引为1;
程序实现如下:
参数表示在数组intArr中查找值value所在的索引
public static int binarySearch(int value, int[] intArr) { int low = 0; // low表示最小索引 int high = intArr.length - 1; // len表示最大索引 while (high >= low) { // 0 1 2 3 4 5 中间索引指2; // 0 1 2 3 4 中间索引则为2 int mid = (low+high) >>> 1; // mid表示len无符号右移一位,最高位补0,即除以2 int midVal = intArr[mid]; // midVal表示数组中间索引处值 if (midVal < value) low = mid + 1; else if (midVal > value) high = mid - 1; else return mid; // 当要查找的值找到时返回其索引 } return -1; // 当要查找的值未找到时返回-1 }
Java:冒泡排序 | 二分查找的更多相关文章
- java 冒泡排序 二分查找 选择排序 插入排序
下面这个程序是先定义一个整型数组,然后将其中的元素反序赋值,再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数,返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值,-2表示这 ...
- 学习练习 Java冒泡排序 二分查找法
冒泡排序: // 冒泡排序 /* System.out.println("请输入要排序的个数:"); Scanner v = new Scanner(System.in); int ...
- [19/03/13-星期三] 数组_二维数组&冒泡排序&二分查找
一.二维数组 多维数组可以看成以数组为元素的数组.可以有二维.三维.甚至更多维数组,但是实际开发中用的非常少.最多到二维数组(我们一般使用容器代替,二维数组用的都很少). [代码示例] import ...
- Java实现二分查找算法
Java程序员总该玩点基本的算法. 1.前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序 2.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中 ...
- 【15】-java实现二分查找
二分查找在面试中经常被遇到,这个方法十分优雅 介绍 二分查找可以解决(预排序数组的查找)问题:只要数组中包含T(即要查找的值),那么通过不断缩小包含T的范围,最终就可以找到它.一开始,范围覆盖整个数组 ...
- 手把手教你用java实现二分查找树及其相关操作
二分查找树(Binary Search Tree)的基本操作有搜索.求最大值.求最小值.求前继.求后继.插入及删除. 对二分查找树的进行基本操作所花费的时间与树的高度成比例.例如有n个节点的完全二叉树 ...
- java实现二分查找
/** * 二分查找 * @param a * @param n * @param value * @return * @date 2016-10-8 * @author shaobn */ publ ...
- java 实现二分查找法
/** * 二分查找又称折半查找,它是一种效率较高的查找方法. [二分查找要求]:1.必须采用顺序存储结构 2.必须按关键字大小有序排列. * @author Administrator * */ p ...
- Java算法 -- 二分查找
折半查找,要求待查找的序列有序.每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程.直到 ...
随机推荐
- Ubuntu下Zabbix服务器监控工具部署
Ubuntu下Zabbix服务器监控工具部署 一 安装安装Apache.Mysql.Php.zabbix sudo apt-get update sudo apt-get install apache ...
- Ubuntu 16.04下安装MacBuntu 16.04 TP 变身Mac OS X主题风格
Ubuntu 16.04下安装MacBuntu 16.04 TP 变身Mac OS X主题风格 sudo add-apt-repository ppa:noobslab/macbuntu sudo a ...
- mipi差分信号原理
差分信号,什么是差分信号 一个差分信号是用一个数值来表示两个物理量之间的差异.从严格意义上来讲,所有电压信号都是差分的,因为一个电压只能是相对于另一个电压而言的.在某些系统里,系统’地’被用作电压基准 ...
- vue项目开发中踩过的坑
一.路由 这两天移动端的同事在研究vue,跟我说看着我的项目做的,子路由访问的时候是空白的,我第一反应是,不会模块没加载进来吧,还是....此处省略一千字... 废话不多说上代码 路由代码 { pat ...
- nginx 多进程 + io多路复用 实现高并发
一.nginx 高并发原理 简单介绍:nginx 采用的是多进程(单线程) + io多路复用(epoll)模型 实现高并发 二.nginx 多进程 启动nginx 解析初始化配置文件后会 创建(for ...
- Java多线程(九) synchronized 锁对象的改变
public class MyService { private String lock = "123"; public void testMethod() { synchroni ...
- [C陷阱和缺陷] 第6章 预处理器
在严格意义上的编译过程开始之前,C语言预处理器首先对程序代码作了必要的转换处理.因此,我们运行的程序实际上并不是我们所写的程序.预处理器使得编程者可以简化某些工作,它的重要性可以由两个主要的原因说 ...
- [C和指针] 6-指针
6.1 内存和地址 我们可以把计算机的内存看作是一条长街上的一排房屋,每座房子都可以容纳数据,并通过一个房号来标识. 这个比喻颇为有用,但也存在局限性.计算机的内存由以亿万计的位(bit)组成,每个位 ...
- 372 Super Pow 超级次方
你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出.示例 1:a = 2b = [3]结果: 8示例 2:a = 2b = [1,0]结果: 102 ...
- Jax
The scope of this project is to automate the current Credit Correction process of opening, editing, ...