Java 最基础的三种排序排序
主要讲五个排序,冒泡排序、选择排序、插入排序
1)冒泡排序
/**
* 冒泡排序 (默认升序排)
* 相邻两个相比较,较大的向后放,从数组或者集合中的第一个与第二个比较到倒数第二个与最后一个比较为一轮比较
* 总共需要比较list.length-1轮循环比较
*/
@Test
public void bubblesort() {
List<Integer> list = Arrays.asList(3, 3, 54, 213, 34, 876, 32, 456, 567, 43, 121, 312, 123, 45, 234, 234, 123, 546, 867, 89, 807, 8, 76); //确定需要重复的次数
for (int j = 0; j < list.size() - 1; j++) {
//每次循环都把相邻想个相比较,较大的向后放
//这里减j 每循环一轮,比较的时候就会少比较一次
for (int m = 0; m < list.size() - j - 1; m++) {
int b;
if (list.get(m) > list.get(m + 1)) {
b = list.get(m);
list.set(m, list.get(m + 1));
list.set(m + 1, b);
}
}
}
for (Integer integer : list) {
System.out.println(integer);
}
}
2)选择排序
/**
* 选择排序 (默认升序)
* 假设一个最小值,循环比较出实际最小值
* 然后把假设最小值与实际最小值互换位置
*/
@Test
public void chooseSort() {
List<Integer> list = Arrays.asList(3, 3, 54, 213, 34, 876, 32, 456, 567, 43, 121, 312, 123, 45, 234, 234, 123, 546, 867, 89, 807, 8, 76);
//总共需要多少轮循环比较,i表示该轮循环假设最小值的角标
for (int i =0; i < list.size()-1; i++){
int temp=i; //假设i是本轮循环中最小元素的索引,temp记录最小元素的角标
for (int n = i+1; n < list.size();n ++){ //比较本轮循环中目前最小值和这个索引下的元素的比较
if (list.get(temp) > list.get(n)){ //如果最小值大于n索引下的元素值那就把n当成最小值索引
temp = n;
}
}
//到这里temp就是实际最小元素的角标了
if (list.get(i) > list.get(temp)){ //如果所假设的的最小值 大于 实际最小值,则互换位置
int record;
record = list.get(i);
list.set(i,list.get(temp));
list.set(temp,record);
}
}
for (Integer integer : list) {
System.out.println(integer);
} }
3)插入排序
/**
* 插入排序
* 从每个数组的第二个元素开始向前比较,只要比前面的小就互换位置,
* 直到前面一个小于等于这个值的时候跳出本循环,开始插入下一个元素
*
*/
@Test
public void insertSort(){
List<Integer> list = Arrays.asList(3, 3, 54, 213, 34, 876, 32, 456, 567, 43, 121, 312, 123, 45, 234, 234, 123, 546, 867, 89, 807, 8, 76); //确定插入的元素是 list.get(i)
for (int i = 1;i<list.size();i++) {
int j=i;
//向前循环比较,如果前面的比插入的值大就互换位置
while (j>0 && j < list.size()){
if (list.get(j) < list.get(j-1)){
int record=list.get(j);
list.set(j,list.get(j-1));
list.set(j-1,record);
}else {
//else可以省略,但是考虑到如果已经确定了前面不会出现比该元素大的数那么再循环下去等于做的无用功,可以直接结束本次循环来节省时间
break;
}
j--;
}
}
for (Integer integer : list) {
System.out.println(integer);
} }
Java 最基础的三种排序排序的更多相关文章
- java多线程中的三种特性
java多线程中的三种特性 原子性(Atomicity) 原子性是指在一个操作中就是cpu不可以在中途暂停然后再调度,既不被中断操作,要不执行完成,要不就不执行. 如果一个操作时原子性的,那么多线程并 ...
- Java 处理 XML 的三种主流技术及介绍
Java 处理 XML 的三种主流技术及介绍 原文地址:https://www.ibm.com/developerworks/cn/xml/dm-1208gub/ XML (eXtensible Ma ...
- java解析xml的三种方法
java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...
- Java语言基础(三)
Java语言基础(三) 一. 补码 (1).之所以有补码是因为要考虑成本 就是造计算机的成本 (2).下面让我们分析一下补码 以四位补码为例 <1> 高位是符号位,它决定其是正数还是 ...
- java中 this 的三种用法
Java中this的三种用法 调用属性 (1)this可以调用本类中的任何成员变量 调用方法(可省略) (2)this调用本类中的成员方法(在main方法里面没有办法通过this调用) 调用构造方法 ...
- (转)Java结束线程的三种方法
背景:面试过程中问到结束线程的方法和线程池shutdown shutdownnow区别以及底层的实现,当时答的并不好. Java结束线程的三种方法 线程属于一次性消耗品,在执行完run()方法之后线程 ...
- JAVA写JSON的三种方法,java对象转json数据
JAVA写JSON的三种方法,java对象转json数据 转自:http://www.xdx97.com/#/single?bid=5afe2ff9-8cd1-67cf-e7bc-437b74c07a ...
- SuperDiamond在JAVA项目中的三种应用方法实践总结
SuperDiamond在JAVA项目中的三种应用方法实践总结 1.直接读取如下: @Test public static void test_simple(){ PropertiesConfigur ...
- Java结束线程的三种方法(爱奇艺面试)
线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁,不能再次start,只能重新建立新的线程对象,但有时run()方法是永远不会结束的.例如在程序中使用线程进行So ...
随机推荐
- if判断,while循环,for循环
if判断 if判断其实就是让计算机模拟人的判断 if if 条件: 代码1 代码2 代码3 ... # 代码块(同一缩进级别的代码,例如代码1.代码2和代码3是相同缩进的代码,这三个代码组合在一起就是 ...
- centos设置ssh安全只允许用户从指定的IP登陆
1.编辑文件 /etc/ssh/sshd_config vi /etc/ssh/sshd_config 2.root用户只允许在如下ip登录 AllowUsers root@203.212.4.117 ...
- ZOJ 3180 Number Game(模拟,倒推)
题目 思路: 先倒推!到最后第二步,然后: 初始状态不一定满足这个状态.所以我们要先从初始状态构造出它出发的三种状态.那这三种状态跟倒推得到的状态比较即可. #include<stdio.h&g ...
- HUD 1426 Sudoku Killer (DFS)
链接 : Here! 思路 : 记录下所有 "?" , 出现的位置, 然后 $DFS$ 一下, 对于每个位置来说都可以填充 $9$ 种数值, 然后对于判断填充是否合法需要三个标记数 ...
- Maven学习总结(4)——Maven核心概念
Maven学习总结(四)--Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识 ...
- POJ 1376 Robot
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7866 Accepted: 2586 Description The R ...
- Spring MVC 注解基础
@Controller @Controller 注解用于标记在 Java 类上.被 @Controller 标记过的类就是一个 SpringMVC Controller对象.DispatcherSer ...
- Spring MVC-视图解析器(View Resolverr)-XML视图解析器(Xml View Resolver)示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_xmlviewresolver.htm 说明:示例基于Spring MVC 4.1 ...
- Findbug插件静态java代码扫描工具使用
本文转自http://blog.csdn.net/gaofuqi/article/details/22679609 感谢作者 FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具. ...
- myeclipse git 上下箭头表示什么
myeclipse git 上下箭头表示什么? 向上箭头表示本地有提交(commit),但是还没有推(push)到远程代码库中,旁边的数字表示本地commit的次数: 向下箭头表示你拉(fetch)下 ...