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算法 -- 二分查找
折半查找,要求待查找的序列有序.每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程.直到 ...
随机推荐
- 【OI新闻】2016.10.09
号外: [头条]今天OI神犇光勋和原子城po ke,Happy Birthday!
- 美国诚实签经验——必带材料:护照,证件照,DS160确认页,面试预约确认页,+境外照片
Step3. 准备签证材料这些材料如果准备,请一定围绕着你的DS160表格,不可说谎,但可适当修饰,辅佐它,烘托它,营造出一种——你绝无可能去不复返,绝无可能制造麻烦,绝无想占人便宜的意思,并且随时可 ...
- luence全文检索(数据库检索)
注解:从数据库中查询所有数据然后放入luence中,然后在luence来检索 package com.zhu.demo; import java.io.IOException; import java ...
- A bad vacation
My story happened in the winter of 2012, the first year I began to work in Beijing. It was a cold we ...
- 将数据从数据仓库Hive导入到MySQL
1.启动Hadoop,hive,mysql 2.在mysql中建表(需要导入数据的) mysql> CREATE TABLE `dbtaobao`.`user_log` (`user_id` v ...
- WP8 中使用HTML Agility Pack与友盟分享SDK遇到的 System.Xml.XPath加载问题
今晚在尝试使用友盟最新的社交分享SDK时,按照官方Demo,并未做多少多少改动,就是去除了对微信.脸书和推特的分享.然后运行之后就一直报错 : {System.IO.FileLoadException ...
- bzoj 3743: [Coci2015]Kamp【树形dp】
两遍dfs一遍向下,一边向上,分别记录子树内人数a,当前点到所有点的距离b,最大值c和次大值d,最大值子树p 然后答案是2b-c #include<iostream> #include&l ...
- bzoj 1801: [Ahoi2009]chess 中国象棋【dp】
注意到一行只能放012个炮,我们只需要知道列的状态,不用状压行 所以设f[i][j][k]表示前i行有j列有1个炮,有k列有2个炮的方案数 然后分情况讨论转移就行了 #include<cstdi ...
- ASP.NET MVC 导出CSV文件
ASP.NET MVC 导出CSV文件.直接贴代码 /// <summary> /// ASP.NET MVC导出CSV文件Demo1 /// </summary> /// ...
- 贪心 Codeforces Round #191 (Div. 2) A. Flipping Game
题目传送门 /* 贪心:暴力贪心水水 */ #include <cstdio> #include <algorithm> #include <cstring> us ...