LinkedList插入排序实现
昨天遇到一个集合排序的问题,要求在list中插入后数据有序,首先考虑使用集合自带的排序方法,但需要把list转成数组,排序后再转回list。后来发现使用插入算法是最省事的,因为既然是在插入里排序,那么在插入前就先找好插入点,插入后序列就是有序的,以此类推。代码贴上:
package com.wulinfeng.io; import java.util.Collections;
import java.util.LinkedList;
import java.util.List; public class SortList {
List<Integer> sSorted = new LinkedList<>(); /**
* 插入算法排序
*
* @param e
*/
public void add(int e) {
boolean inserted = false;
// 非首次插入需要遍历list,找到比插入值大的数所在索引并插入,后面的元素后移
for (int i = 0; i < sSorted.size(); i++) {
if (e < sSorted.get(i)) {
sSorted.add(i, e);
inserted = true;
break;
}
}
// 没找到值比自己大的插入点,追加到最后
if (!inserted) {
sSorted.add(e);
}
} /**
* 使用集合排序
*
* @param e
* @param useCollections
*/
public void add(int e, boolean useCollections) {
if (useCollections) {
// 先插入
sSorted.add(e);
// 再排序
Collections.sort(sSorted);
}
} public static void main(String[] args) {
SortList slist = new SortList();
slist.add(99);
slist.add(3);
slist.add(6);
slist.add(128); System.out.println("插入排序后的list:");
for (Integer i : slist.sSorted) {
System.out.printf("%3d\t", i);
} System.out.println(""); slist.add(123, true);
slist.add(45, true);
slist.add(19, true);
slist.add(318, true); System.out.println("集合排序后的list:");
for (Integer i : slist.sSorted) {
System.out.printf("%3d\t", i);
}
}
}
运行结果:
插入排序后的list:
3 6 99 128
集合排序后的list:
3 6 19 45 99 123 128 318
LinkedList插入排序实现的更多相关文章
- Java _ JDK _ Arrays, LinkedList, ArrayList, Vector 及Stack
		
(最近在看JDK源码,只是拿着它的继承图在看,但很多东西不记录仍然印象不深,所以开始记录JDK阅读系列.) (一)Arrays Arrays比较特殊,直接继承自Arrays ->List(Int ...
 - JAVA-集合类型List(ArrayList、LinkedList)常用操作例子(基础必备)
		
package com.net.xinfang.reflect; import java.util.ArrayList; import java.util.Arrays; import java.ut ...
 - 对比Vector、ArrayList、LinkedList区别
		
Vector是Java早期提供的线程安全的动态数组.因为同步是又额外开销的,所以如果不需要线程安全,不建议选择.Vector内部用对象数组保存数据,可以根据需要自动的增加容量,当数组已满时,会创建新的 ...
 - 直接插入排序(java实现)
		
这几天看排序算法,网上大多数排序算法的解释都是“过于专业”,导致一时半会看不明白到底在说什么玩意.现在总结下几大排序算法(java实现) 1.直接插入排序 说的简单点,就是一组无序序列{A1,A2,. ...
 - 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
		
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
 - To Java程序员:切勿用普通for循环遍历LinkedList
		
ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...
 - Html5 直接插入排序
		
直接插入排序算法(Straight Insertion Sort),是排序算法中简单的一种算法,基本思想如下: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表.即:先将序列的第 ...
 - 计算机程序的思维逻辑 (39) -  剖析LinkedList
		
上节我们介绍了ArrayList,ArrayList随机访问效率很高,但插入和删除性能比较低,我们提到了同样实现了List接口的LinkedList,它的特点与ArrayList几乎正好相反,本节我们 ...
 - 深入理解java中的ArrayList和LinkedList
		
杂谈最基本数据结构--"线性表": 表结构是一种最基本的数据结构,最常见的实现是数组,几乎在每个程序每一种开发语言中都提供了数组这个顺序存储的线性表结构实现. 什么是线性表? 由0 ...
 
随机推荐
- idea中git合并切换分支等操作
			
https://blog.csdn.net/autfish/article/details/52513465
 - The remote end hung up unexpectedly while git cloning
			
https://stackoverflow.com/questions/6842687/the-remote-end-hung-up-unexpectedly-while-git-cloning Qu ...
 - hdu 5719 Arrange 贪心
			
Arrange Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Proble ...
 - Java中的条件运算符
			
条件运算符( ? : )也称为 “三元运算符”. 语法形式:布尔表达式 ? 表达式1 :表达式2 运算过程:如果布尔表达式的值为 true ,则返回 表达式1 的值,否则返回 表达式2 的值 例如: ...
 - IFE 2015_spring task0002 自学记录
			
JavaScript数据类型及语言基础 1. 判断arr是不是一个数组,返回一个bool值. 首先javascript有5大基本数据类型:Undefined,Null,Boolean,Number和S ...
 - GO学习笔记:函数传值与传指针
			
当我们传一个参数值到被调用函数里面时,实际上是传了这个值的一份copy,当在被调用函数中修改参数值的时候,调用函数中相应实参不会发生任何变化,因为数值变化只作用在copy上. 为了验证我们上面的说法, ...
 - Tavas and Karafs 二分+结论
			
二分比较容易想到 #include<map> #include<set> #include<cmath> #include<queue> #includ ...
 - UVALive 4270 Discrete Square Roots
			
题目描述: 在已知一个离散平方根的情况下,按照从小到大的顺序输出其他所有的离散平方根. 在模n意义下,非负整数x的离散平方根是满足0<=r<n且r2=x(mod n)的整数r. 解题思路: ...
 - iOS自动化探索(三)WebDriverAgent Python Client
			
之前我们在终端试着调用过WDA API, 今天我们在看一个Python封装的api库 https://github.com/openatx/facebook-wda 安装方式(一): pip inst ...
 - 016——VUE中v-show的使用与v-if的差异对比
			
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...