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算法 -- 二分查找
折半查找,要求待查找的序列有序.每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程.直到 ...
随机推荐
- EJS基本使用
基本使用 Render 渲染字符串 Compile编译字符串到模板函数(需调用才能生成html内容) <!DOCTYPE html> <html lang="en" ...
- 理解dropout——本质是通过阻止特征检测器的共同作用来防止过拟合 Dropout是指在模型训练时随机让网络某些隐含层节点的权重不工作,不工作的那些节点可以暂时认为不是网络结构的一部分,但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了
理解dropout from:http://blog.csdn.net/stdcoutzyx/article/details/49022443 http://www.cnblogs.com/torna ...
- 远程报错:这可能是由于credssp加密oracle修正
- RDA 多屏参流程
一.RDA MAKEFILE的本地变量 在介绍多屏参之前,先看一下./code/env.conf的包含过程,通过./code/Makefile.project加载,env.conf中所有的变量,都变为 ...
- Java序列化系列教程(上)
一定义以及相关概念 互联网的产生带来了机器间通讯的需求,而互联通讯的双方需要采用约定的协议,序列化和反序列化属于通讯协议的一部分.通讯协议往往采用分层模型,不同模型每层的功能定义以及颗粒度不同,例如: ...
- Same Tree 序列化二叉树
https://oj.leetcode.com/problems/same-tree/ Given two binary trees, write a function to check if the ...
- 引水入城 2010年NOIP全国联赛提高组(bfs+贪心)
1066 引水入城 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在一个遥远 ...
- Linux 搭建Discuz论坛
title: Linux 搭建Discuz论坛 Welcome to Fofade's Blog! 这里是Linux 搭建论坛的一些命令记录 命令摘记: 下载文件:Discuz 安装环境:PHP Ap ...
- vue.js学习文档
1.实例化vue对象 new Vue(){ } 2.对象属性 el: 控制的属性 data: 数据存储位置 methods: 方法存储位置 template: 模板样式 computed: 计算属性 ...
- SQL数据库——静态成员
静态: 1.普通成员普通成员都是属于对象的用对象调用 2.静态成员静态成员是属于类的用类名调用 stactic 静态关键字 静态方法里面不能包含普通成员普通方法里面可以包含静态成员 静态: 1.普通成 ...