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 ...
随机推荐
- Oreacle 语句
SELECT * FROM = and CREATETIME >to_date('2019-01-01' , 'yyyy-mm-dd hh24:mi:ss') and CREATETIME &l ...
- H5及微信中唤起app的解决方案
今天我们就来说说这个callapp-lib 我的接到的需求大概是这样的 如果检测到不是在app里面用webview打开的页面就会显示上面的立即打开按钮, 点击的话会判断是否在微信中, 如果在微信中打开 ...
- Oracle 【基 本 操 作】
1.日期时间 select SYSDATE from DUAl; select TO_CHAR(SYSDATE, 'YYYY-MM-DD') from DUAL; select TO_CHAR(SYS ...
- asp网站中使用百度ueditor教程.txt
1.根据网站类型及编码选择相应的ueditor版本,如我的网站编码为gb2312,则选择ueditor 1.43 asp gbk版.2.本机IE浏览器应为8.0或以上,8.0以下的ueditor 1. ...
- 计蒜客 成绩统计 (Hash表)
链接 : Here! 思路 : 如果用 $STL$ 的 $map$ 或者是使用 $unordered\underline{}map$ 的话是会 $T$ 的, 所以得手写一个 $hash表$. 其实这个 ...
- Luogu P1256 显示图像
P1256 显示图像 题目描述 古老的显示屏是由N×M个像素(Pixel)点组成的.一个像素点的位置是根据所在行数和列数决定的.例如P(2,1)表示第2行第1列的像素点.那时候,屏幕只能显示黑与白两种 ...
- git 的简单使用(5)
git中打标签非常简单:只需要先奇幻岛想要打标签的分支 然后使用指令 git tag <name>就可以打一个新标签 可以用指令 git tag 查看所有标签 git tag <标签 ...
- “从客户端(content="XXXX")中检测到有潜在危险的 Request.Form值” 解决方案
解决方案一: 在.aspx文件头中加: <%@Page validateRequest="false" %> 解决方案二: 修改web.config文件: <co ...
- 【Codeforces 466C】Number of Ways
[链接] 我是链接,点我呀:) [题意] 让你把数组分成3个连续的部分 每个部分的和要一样 问你有多少种分法 [题解] 先处理出来num[i] 表示i..n这里面有多少个j 满足aft[j] = af ...
- 【[Offer收割]编程练习赛13 B】最大子矩阵(别人的思路)
[题目链接]:http://hihocoder.com/problemset/problem/1502 [题意] [题解] 枚举矩形的最上面的行数和最下面的行数(i,j且i<=j); 然后一个变 ...