Java冒泡法和二分法
最近去一家公司面试,手贱在人家CTO面前自告奋勇写了一把冒泡法,结果在交换数据的时候出了洋相,回家反思,写下如下代码,对自己算是一个鞭策,得到的教训是不要眼高手低,低调前行。
package com.defymedia.interview.sort; import java.util.ArrayList;
import java.util.List;
import java.util.Random; public class SimpleSort { public static final int NO_MATCH = -1; public <T extends Comparable> List<T> sort(List<T> list) {
int size = list != null ? list.size() : 0;
if (size == 0) return null; for (int i = 0; i < size; i++) {
for (int j = i + 1; j < size; j++) {
if (list.get(i).compareTo(list.get(j)) > 0) {
T temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
}
}
} return list;
} public <T extends Comparable> T[] sort(T[] ts) {
int size = ts != null ? ts.length : 0;
if (size == 0) return null; for (int i = 0; i < size; i++) {
for (int j = i + 1; j < size; j++) {
if (ts[i].compareTo(ts[j]) > 0) {
T temp = ts[i];
ts[i] = ts[j];
ts[j] = temp;
}
}
} return ts;
} public <T extends Comparable> int binarySearch(T[] ts, T t) {
int length = ts != null ? ts.length : NO_MATCH;
if (length <= 0 || t == null) return NO_MATCH; int middle;
int index = NO_MATCH;
int low = 0;
int high = length;
while (low < high) {
middle = (low + high) >> 1;
T temp = ts[middle];
if (temp.compareTo(t) > 0) {
high = middle;
} else if (temp.compareTo(t) < 0) {
low = middle;
} else {
index = middle;
break;
}
} System.out.println("index is " + index);
return index;
} public static void main(String[] param) {
SimpleSort simpleSort = new SimpleSort();
int size = 10;
Random random = new Random();
List<Integer> list = new ArrayList<>(size);
for (int i = 0; i < size; i++) {
list.add(random.nextInt(20));
}
list = simpleSort.sort(list);
for (Comparable comparable : list) {
System.out.println(comparable.toString());
}
Integer[] data = new Integer[size];
for (int i = 0; i < size; i++) {
data[i] = random.nextInt(50);
}
data = simpleSort.sort(data);
for (Comparable comparable : data) {
System.out.println(comparable.toString());
}
int number = NO_MATCH;
simpleSort.binarySearch(data, number);
}
}
Java冒泡法和二分法的更多相关文章
- JAVA中方法和变量在继承中的覆盖和隐藏
出处:http://renyanwei.iteye.com/blog/258304 我们知道,在JAVA中,子类可以继承父类,如果子类声明的方法与父类有重名的情况怎么办,大伙儿都知道要是重写,但是实际 ...
- JAVA中方法和变量在继承中的覆盖和隐藏(一)
我们知道,在JAVA中,子类可以继承父类,如果子类声明的方法与父类有重名的情况怎么办,大伙儿都知道要是重写,但是实际上这又分为两种情况,就是方法和变量在继承时的覆盖和隐藏问题,这些概念性的东西看似无聊 ...
- java驼峰法和下划线法字符串的相互转换
java驼峰法和下划线法字符串的相互转换 1 import java.util.regex.Matcher; import java.util.regex.Pattern; public class ...
- JAVA 冒泡算法
每种语言都有冒泡JAVA实现如下: public static void main(String args[]){ System.out.println("Start"); int ...
- Java基础(50):二分法查找的非递归实现和递归实现(完整代码可运行,参考VisualGO理解更佳)
一.概念 二分查找算法也称折半查找,是一种在有序数组中查找某一特定元素的搜索算法. 二.算法思想 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束:如果某一特定元素大于或者 ...
- list、冒泡、二分法
1.遍历第一次,寻找最大值,并且记录最大值的索引max_index 2.list(dict,str) 伪代码: if(是不是有饭吃): 如果是真 执行 (缩进) else: 如果是假 执行 写代码学习 ...
- java基础之二分法查找
package p1; import java.util.*; public class Sortdob { public static void BubbleSort(int[] arr) { ...
- Java语言实现二分法
二分法是一个简单,高效,并广泛应用的查找方法 import java.util.arrays; public class BinarySearch { public static int rank(i ...
- 基于python语言的经典排序法(冒泡法和选择排序法)
前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 ...
随机推荐
- Unity3d外包公司|UE4外包公司:谷歌首款Daydream VR设备上手
这款售价仅为79美元(约合人民币525元)的产品内含“够用”的手柄和一台头戴设备,只要你有一台支持月日,10月5日,dream平台的手机(未来将成为安卓平台的标配),就能体验VR的乐趣. 即使该产品最 ...
- IDEA Maven项目的Mybatis逆向工程
IDEA Maven项目的Mybatis逆向工程 1.配置.pom 如果是在多模块开发下,该文件逆向工程要生成的那个模块下的pom文件. <build> <plugins> & ...
- Spark Standalone cluster try
Spark Standalone cluster node*-- stop firewalldsystemctl stop firewalldsystemctl disable firewalld-- ...
- 简单谈谈$.merge()
var arr1 = [1,2,3]; var arr2 = [1,2,3]; console.log($.merge(arr1,arr2)) //[1,2,3,1,2,3],可见数组间只是合并,不会 ...
- springboot缓存注解——@CachePut
@CachePut:既调用方法,又更新缓存数据:修改了数据库的某个数据,同时又更新缓存 运行时机: 先调用目标方法 将目标方法的结果缓存起来 注意: @Cacheable的key不能用#result来 ...
- 《R语言入门与实践》第六章:R 的环境系统
前言 这一章在对象的基础之上,讲解了对象所处的环境,进一步讲了环境对对象的作用,以及如何使用环境.结构如下: 环境的定义和操作 环境的规则 制作闭包 环境 R 环境的定义 在 R 中,每一个数据对象都 ...
- 蓝鲸DevOps深度解析系列(2):蓝盾流水线初体验
关注嘉为科技,获取运维新知 前面一篇文章<蓝鲸DevOps深度解析系列(1):蓝盾平台总览>,我们总览了蓝鲸DevOps平台的背景.应用场景.特点和能力: 接下来我们继续解析蓝盾平台的 ...
- iphone上mitmproxy证书设置
PC端安装mitmproxy并添加证书后,基本问题不大,都能正常运行起来 手机端iphone上下载安装mitmproxy证书: 1.手机和PC在同一个局域网中,设置wifi代理为PC端的ip,端口为m ...
- Confluence 6 在升级之前
在这个指南中,我们将会与你一同对最新的 Confluence 站点在 Windows 或者 Linux 平台进行安装和更新. 如果你的 Confluence 安装实例是当前的许可证的话,那么对 Con ...
- windows 安装xadmin
1.访问github :https://github.com/sshwsfc/xadmin 2.新建README.rst 并替换到下载的zip文件中 3.cmd下,进入虚拟环境使用pip instal ...