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算法 -- 二分查找
折半查找,要求待查找的序列有序.每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程.直到 ...
随机推荐
- Potentiometers
题意: 线段树的单点修改,区间查询 #include <map> #include <set> #include <list> #include <cmath ...
- java多线程面试题(来自转载)
在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问 ...
- bzoj 1497(最大权闭合子图)
1497: [NOI2006]最大获利 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 6410 Solved: 3099[Submit][Status] ...
- 洛谷 P1351 联合权值 —— 树形DP
题目:https://www.luogu.org/problemnew/show/P1351 树形DP,别忘了子树之间的情况(拐一下距离为2). 代码如下: #include<iostream& ...
- Python print 输出不换行,只有空格
for x in open("/home/soyo/桌面/中期内容/6.txt"): print x, ,,,]: print x, #print 输出没有换行,只有空格 结果: ...
- bzoj 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路【Floyd】
弗洛伊德之后按序列加起来即可 #include<iostream> #include<cstdio> #include<algorithm> using names ...
- 源码阅读之HashMap(JDK8)
概述 HashMap根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的. HashMap最多只允许一条记录的键为null,允许多条记录 ...
- 怎样去思考问题 解决问题 zkc学长的福利
题目描述 又是一年ACM集训的时刻,zkc学长邀请n位同学来玩一个有奖游戏.首先,他让每个同学在左.右手上面分别写下一个整数,zkc学长自己也在左.右手上各写一个整数.然后,让这n位同学排成一排,zk ...
- Linux学习笔记之Linux相关知识
[想成为某一方面的大神,没有捷径可走,只能不断的记录.练习.总结.coding……] notes:主要从网上摘录了一些关于Linux的历史以及一些相关内容,以便对Linux系统有一定的了解.这不但可以 ...
- python自动化测试学习笔记-10YAML
之前学习的编写测试用例的方法,都是从excel中编写接口的测试用例,然后通过读取excel文件进行接口自动化测试,这种方式我们叫做数据驱动的方式,由于excel操作起来不灵活,无法实现关联关系的接口测 ...