主要讲五个排序,冒泡排序、选择排序、插入排序

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 最基础的三种排序排序的更多相关文章

  1. java多线程中的三种特性

    java多线程中的三种特性 原子性(Atomicity) 原子性是指在一个操作中就是cpu不可以在中途暂停然后再调度,既不被中断操作,要不执行完成,要不就不执行. 如果一个操作时原子性的,那么多线程并 ...

  2. Java 处理 XML 的三种主流技术及介绍

    Java 处理 XML 的三种主流技术及介绍 原文地址:https://www.ibm.com/developerworks/cn/xml/dm-1208gub/ XML (eXtensible Ma ...

  3. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...

  4. Java语言基础(三)

    Java语言基础(三) 一.    补码 (1).之所以有补码是因为要考虑成本 就是造计算机的成本 (2).下面让我们分析一下补码 以四位补码为例 <1> 高位是符号位,它决定其是正数还是 ...

  5. java中 this 的三种用法

    Java中this的三种用法 调用属性 (1)this可以调用本类中的任何成员变量 调用方法(可省略) (2)this调用本类中的成员方法(在main方法里面没有办法通过this调用) 调用构造方法 ...

  6. (转)Java结束线程的三种方法

    背景:面试过程中问到结束线程的方法和线程池shutdown shutdownnow区别以及底层的实现,当时答的并不好. Java结束线程的三种方法 线程属于一次性消耗品,在执行完run()方法之后线程 ...

  7. JAVA写JSON的三种方法,java对象转json数据

    JAVA写JSON的三种方法,java对象转json数据 转自:http://www.xdx97.com/#/single?bid=5afe2ff9-8cd1-67cf-e7bc-437b74c07a ...

  8. SuperDiamond在JAVA项目中的三种应用方法实践总结

    SuperDiamond在JAVA项目中的三种应用方法实践总结 1.直接读取如下: @Test public static void test_simple(){ PropertiesConfigur ...

  9. Java结束线程的三种方法(爱奇艺面试)

    线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁,不能再次start,只能重新建立新的线程对象,但有时run()方法是永远不会结束的.例如在程序中使用线程进行So ...

随机推荐

  1. python json结构

    =====================================================json==============================import reques ...

  2. Spring MVC 单元测试Demo

    @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations={" ...

  3. Ubuntu | Flask + Gunicorn + Nginx 部署服务器环境

    现在我们手里有一个准备发布的项目,那么如何将他上传到你的服务器,并让外网访问呢? 前提: 1. 安装了Python环境 apt-get install python-dev 2. 安装Flask pi ...

  4. hadoop在线退役datanode

    退役dn2echo "dn2" >>excludes echo "dn2" >>yarn-excludes sh refresh-nam ...

  5. mybatis注解开发-动态SQL

    实体类以及表结构 在mybatis-config.xml中注册mapper接口 -------------------------- 动态查询@SelectProvider EmployeeMappe ...

  6. BNUOJ 1021 信息战(七)——情报传递

    信息战(七)——情报传递 Time Limit: 3000ms Memory Limit: 262144KB 64-bit integer IO format: %lld      Java clas ...

  7. broker监控dataguard配置

    使用broker查看dataguard信息时有告警 DGMGRL> show configuration; Configuration - DRTEST Protection Mode: Max ...

  8. [bzoj3697]采药人的路径_点分治

    采药人的路径 bzoj-3697 题目大意:给你一个n个节点的树,每条边分为阴性和阳性,求满足条件的链的个数,使得这条链上阴性的边的条数等于阳性的边的条数,且这条链上存在一个节点,这个节点到一个端点的 ...

  9. Spring MVC 入门(一)

    什么是 Spring MVC 学习某一样东西之前,我们一定要大致知道这个东西是什么,能干什么,为什么要用它. Spring MVC 是一个开源平台,一个基于 Spring 的 MVC 框架,它支持基于 ...

  10. N天学习一个linux命令之ping

    用途 检测主机是否可到达,也就是说,目标主机是否可以联网,还可以用于检测网速.通过发送ICMP ECHO_REQUEST数据包检测. 用法 ping [options] destination 常用选 ...