项目中涉及到对大批量的数据进行打乱式排序,大概原理如下:

  输入源数据:1,1,2,3,3,3,4,4

  输出结果:   1,2,3,4,1,3,4,3

  

  实现代码如下,采用递归的思想: 

static <T> List<T> sort(List<T> numbers){
List<T> rights = Lists.newArrayList();
   if(numbers.size == 0) {
return rights;
}else if(numbers.size() == 1){
rights.addAll(numbers);
numbers.clear();
return rights;
} List<T> lefts = Lists.newArrayList();
for(T num : numbers){
if(!rights.contains(num)){
rights.add(num);
}else{
lefts.add(num);
}
}
if(lefts.size > 0){
rights.addAll(sort(lefts));
lefts.clear();
} return rights;
}

打乱式排序的Java版实现的更多相关文章

  1. 排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

    常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结 ...

  2. 排序算法系列:选择排序算法JAVA版(靠谱、清晰、真实、可用、不罗嗦版)

    在网上搜索算法的博客,发现一个比较悲剧的现象非常普遍: 原理讲不清,混乱 啰嗦 图和文对不上 不可用,甚至代码还出错 我总结一个清晰不罗嗦版: 原理: 从数组头元素索引i开始,寻找后面最小的值(比i位 ...

  3. 常用排序算法--java版

    package com.whw.sortPractice; import java.util.Arrays; public class Sort { /** * 遍历一个数组 * @param sor ...

  4. 高速排序(Java版)

    package com.love.test; import java.util.Scanner; /** * @author huowolf *高速排序实现 *快排是十分优秀的排序算法. *核心:分治 ...

  5. 常见的链表排序(Java版)

    上篇博客中讲解了九大内部排序算法,部分算法还提供了代码实现,但是那些代码实现都是基于数组进行排序的,本篇博客就以链表排序实现几种常见的排序算法,以飨读者. 快速排序的链表实现 算法思想:对于一个链表, ...

  6. 排序算法Java版

    选择排序: public static void selectSort(int[]a) { int minIndex=0; int temp=0; if((a==null)||(a.length==0 ...

  7. 排序小结(java版)

    一.归并排序 package org.lxh.demo08.b; class Sort { private int[] a; private int n; Sort(int n) { a=new in ...

  8. 选择排序(java版)

    public class SelectSortTest { public static void selectSort(int[] source) { for (int i = 0; i < s ...

  9. 常见排序算法总结(java版)

    一.冒泡排序 1.原理:相邻元素两两比较,大的往后放.第一次完毕,最大值在最大索引处. 即使用相邻的两个元素一次比价,依次将最大的数放到最后. 2.代码: public static void bub ...

随机推荐

  1. .Net Core下基于NPOI对Excel、Word操作封装

    本库进行了重写,如果需要请转移到下文查看: https://www.cnblogs.com/holdengong/p/10889780.html 框架与依赖 框架:.NET Standard 2.0 ...

  2. Hadoop的安装与配置

    一.准备环境: 系统:centos6.5 64位 192.168.1.61   master 192.168.1.5     slave 二.在两台服务器上都要配置ssh免密码登录 在192.168. ...

  3. Linux之sersync数据实时同步

    sersync其实是利用inotify和rsync两种软件技术来实现数据实时同步功能的,inotify是用于监听sersync所在服务器上的文件变化,结合rsync软件来进行数据同步,将数据实时同步给 ...

  4. P4338 [ZJOI2018]历史 LCT+树形DP

    \(\color{#0066ff}{ 题目描述 }\) 这个世界有 n 个城市,这 n 个城市被恰好 \(n-1\) 条双向道路联通,即任意两个城市都可以 互相到达.同时城市 1 坐落在世界的中心,占 ...

  5. Warning: Static member accessed via instance reference

    Warning: Static member accessed via instance reference Shows references to static methods and fields ...

  6. node 后台搭建笔记

    *注:本文是个人记录,非常粗略 1.建立server服务的文件被单独放置在一个文件夹下或最外层 2.src文件包含:controller/model/routes 文件夹 和 app.js文件

  7. kuangbin专题十六 KMP&&扩展KMP POJ3080 Blue Jeans

    The Genographic Project is a research partnership between IBM and The National Geographic Society th ...

  8. 商品录入功能v1.0【持续优化中...】

    # 录入商品 def goods_record(): print("欢迎使用铜锣辉的购物商城[商品管理][录入商品]".center(30, "*")) whi ...

  9. List<T>中 GetRange (int index, int count)的使用

    GetRange:在源 List<T> 中创建元素范围的浅表复制. ; ) { List<T> uplist = new List<T>(); u++; <= ...

  10. php 中 ?? 和 empty 的 区别

    left??right  操作符...当 left 为空时 返回 right ..注意 和 empty 相比 ,空字符,0,'0' 都会返回它本身,而不是 右边的..也就是 当且仅当 没有设置变量或者 ...