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 ...
随机推荐
- C# 金钱添加逗号0000
private void Form1_Load(object sender, EventArgs e) { decimal dd = (decimal)11234567890.01; string d ...
- Python 之读取大文件readline与readlines的差别
import time def get_all_lines(filename): start_time = time.time() try: f = open(filename, 'rb') exce ...
- mysql高可用架构mha之master_ip_failover脚本
脚本如下: #!/usr/bin/env perl use strict; use warnings FATAL => 'all'; use Getopt::Long; my ...
- C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)
/**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...
- ACM蓝桥杯之换硬币问题
题目描述: 想兑换100元零钱,有1元.2元.5元.10元四种面值,总有多少种兑换方法? 解题思路: 本题可以采用多种方法求解.最容易理解的应该就是暴力穷举和递归求解.那么本文主要介绍这两种解法. 暴 ...
- 六、Scrapy中Download Middleware的用法
本文转载自: https://scrapy-chs.readthedocs.io/zh_CN/latest/topics/downloader-middleware.html https://doc. ...
- 20170622-编译Uboot错误
参照:http://docs.widora.io/zh/uboot编译 Assembler messages:Error: unknown architecture `4kc' Error: unre ...
- play snake on windows
今天和人吃晚饭突然想起来 之前西佳佳老师说小学期会要求两星期撸一个小游戏 有人已经撸完一个俄罗斯方块了... 菜逼我决定从最简单的贪吃蛇玩起... 我是直接参考的这个博客 算是相当简单而且很Low的实 ...
- Redis学习总结(1)——Redis内存数据库详细教程
1.redis是什么 2.redis的作者何许人也 3.谁在使用redis 4.学会安装redis 5.学会启动redis 6.使用redis客户端 7.redis数据结构 – 简介 8.redis数 ...
- 【MariaDB】MariaDB vs MySQL - 特性
原文链接: https://mariadb.com/kb/en/mariadb-vs-mysql-features/ xiaomo译------ 支持更多的存储引擎 除了标配的MyISAM, BLAC ...