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 ...
随机推荐
- bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞
没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...
- Oracle常见的几种登录方式
1.运行SQLPLUS工具 C:\Users\csb>sqlplus(回车) (输入账户)system(回车) (输入密码) (回车) 2.直接进入SQLPLUS命令提示符,无用户的登陆 C:\ ...
- RENOUNCEMENT
I must not think of thee;and,tired yet syrong,I shun the thought that lurks in all delight--The thou ...
- codeforces 831B. Keyboard Layouts 解题报告
题目链接:http://codeforces.com/contest/831/problem/B 题目意思:给出两个长度为26,由小写字母组成的字符串s1和s2,对于给出的第三个字符串s3,写出对应s ...
- Visual对象——WPF
System.Object System.Windows.Threading.DispatcherObject System.Windows.Depende ...
- 第一章 Burp Suite 安装和环境配置
Burp Suite是一个集成化的渗透测试工具,它集合了多种渗透测试组件,使我们自动化地或手工地能更好的完成对web应用的渗透测试和攻击.在渗透测试中,我们使用Burp Suite将使得测试工作变得更 ...
- xcrun: error: active developer path (/Users/XJW/Desktop/Xcode.app/Contents/Developer) does not exist, use `xcode-select --switch path/to/Xcode.app` to
问题: 装了双xcode 删掉低版本 (注意:低版本xcode 开启过项目 ) 创建git时报错 解决方法: sudo xcode-select -switch /Applications ...
- mongodb分片介绍—— 基于范围(数值型)的分片 或者 基于哈希的分片
数据分区 MongoDB中数据的分片是以集合为基本单位的,集合中的数据通过 片键 被分成多部分. 片键 对集合进行分片时,你需要选择一个 片键 , shard key 是每条记录都必须包含的,且建立了 ...
- Spring 自动装配;方法注入
通过配置defalut—autowire属性,Spring IOC容器可以自动为程序注入Bean:默认是no(不启用自动装配). default—autowire的类型有: byName:通过名称自动 ...
- OC-协议与代理
[协议]================================================================ @protocol [协议的作用]:规定了需要实现的接口方法, ...