之前我们介绍过猴子排序

https://blog.csdn.net/yshuoo/article/details/103831424

猴子排序的思想很简单,但是算法的时间复杂度太慢了,于是有人引入了当下最玄学的量子理论和当下很火的平行宇宙理论,我觉得其实就是空间换时间的思想。

对猴子排序做了升级,即量子猴排序。

如果猴子排序随机数列时,使用量子化随机排列,那么在我们观测这组数字前,他的状态是叠加的,通过这种排列我们就能划分出全排列数量的平行宇宙,下面要做的就是去观测这个宇宙,找到一个有序的平行宇宙即可。时间复杂度只有是不是快很多。

全部代码:

public class QuantumBogoSort {/*** 检查数组是否有序* @return*/private static boolean checkOrder (List<Integer> list){for (int i = 1; i < list.size(); i++){if (list.get(i) <= list.get(i - 1)){return false;}}return true;}/*** 全排列*/private static void permutationSequence(int[] array, int start, int end, List<List<Integer>> arrayList){if (start == end){List<Integer> list = new ArrayList<>();for (int i : array){list.add(i);}arrayList.add(list);return;}for (int i = start; i < end; i++){swap(array,i,start);permutationSequence(array,start + 1, end, arrayList);swap(array,i,start);}}private static void swap(int[] arr, int i, int j){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}public static void main(String[] args){int[] array = {9,10,8,3,7};List<List<Integer>> arrayList = new ArrayList<>();permutationSequence(array,0,array.length,arrayList);long startTime = System.currentTimeMillis();for (List<Integer> list : arrayList){boolean isOrder = checkOrder(list);if (isOrder){for (Integer num : list){System.out.printf(num + " ");}break;}}long endTime = System.currentTimeMillis();System.out.println("排序完成,耗时:" + (endTime-startTime) + " ms");}}

微信公众号:二虎程序

源码地址:https://github.com/TigerTurbo/InterestingAlgorithm

奇葩算法系列——量子猴子排序相关推荐

  1. 排序算法系列:Shell 排序算法

    概述 希尔排序(Shell Sort)是 D.L.Shell 于 1959 年提出来的一种排序算法,在这之前排序算法的时间复杂度基本都是 O(n2n^{2}n2) 的,希尔排序算法是突破这个时间复杂度 ...

  2. 白话经典算法系列之——希尔排序的实现

    希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个"增量"的 ...

  3. 奇葩算法系列——睡眠排序 (面条排序)

    睡眠排序源于网上流传的一个段子,版本也很多,有的是面试写的,有的是刚入职写的,总之当时在网上是火过一段时间的. 基本原理也很简单,利用CPU的调度原理,通过创建与待排数列元素个数相等的线程,在执行的时 ...

  4. 算法系列【希尔排序】篇

    常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 关于时间复杂度: 1.     平方阶 (O(n2)) 排序各类简单排序:直接插入 ...

  5. 数据结构和算法系列5 七大排序之冒泡排序和快速排序

    排序是我们生活中经常会面对的问题.同学们做操时会按照从矮到高排列:老师查看上课出勤情况时,会按学生学号顺序点名:高考录取时,会按成绩总分降序依次录取等.排序是数据处理中经常使用的一种重要的运算,它在我 ...

  6. 排序算法系列:选择排序算法

    概述 这是一个相对简单的排序算法.为什么这么说呢?因为不需要什么思考,你就可以掌握并使用它. 版权说明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 本文作者:Q-WHai ...

  7. 算法系列之五 希尔排序

    对于前面讲过的基础排序来说,他们在实际使用的时候,价值并不是太大.它的价值在于,体现了一种很好的思想.通过一些改进和变化,可以达到一个不错的性能.希尔排序就是典型的一个例子,它改进了插入排序,使得算法 ...

  8. 算法系列之选择排序算法

    排序算法的中心思想就是每次从待排序的数组中获取一个最小值或者最大值,将每次获取的最大值或者最小值放到新的数组中形成一个有序列表. 具体做法是:1 先将数组中的第一位假设成最小值min,拿它与数组中的其 ...

  9. 白话经典算法系列之六 高速排序 高速搞定

    高速排序因为排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被採用,再加上高速排序思想----分治法也确实有用,因此非常多软件公司的笔试面试,包含像腾讯,微软等知名IT公司都喜欢考这 ...

最新文章

  1. 你为何如此优秀?| 神策数据 2018 年获奖集锦
  2. 音视频技术“塔尖”之争,网易云信如何C位出道?
  3. python k线合成_手把手教你写一个Python版的K线合成函数
  4. 领域驱动设计理论基础
  5. GlassFish linux下配置服务并自动启动
  6. 【HDU - 1520】Anniversary party (树形dp)
  7. php 的html文件怎么打开,什么是html文件?html格式如何打开?(图)
  8. asp和php功能,asp和php都有什么功能?
  9. MySQL学习记录 (四) ----- SQL数据管理语句(DML)
  10. System Center 2016组件将发生什么变化?
  11. IBMX3850X5服务器安装2008R2系统
  12. DHCP报文及其格式
  13. 安装neo4j过程中存在的问题
  14. wps折线图如何画多条折线_怎么用wps制作折线图 wps制作多条折线图的步骤方法...
  15. ubuntu server 20 开启无线热点
  16. 【python】案例十 字符串中的逆天函数
  17. 10道虐心的Java面试题,被面试官虐哭了,同事一题都没答对
  18. Linkerd2入门
  19. Python学习——02-Python基础——【4-文件处理与三元运算】
  20. Execl--获取任意当前单元格的前2个单元格数据做运算--求下降百分比

热门文章

  1. Repeater重放攻击
  2. 基于安卓的大学生心理健康管理系统的设计与实现
  3. Flutter学习笔记08-Padding Row Column Flex Expanded组件详解
  4. 如何修改apn服务器,手机apn怎么设置服务器
  5. 闪信智能化物业维修管理系统
  6. 大学物理 电磁学 电磁场 思维导图总结
  7. SqlSever错误 证书链是由不受信任的颁发机构颁发的
  8. 2021年全球出租车调度软件收入大约402.3百万美元,预计2028年达到1189.3百万美元,2022至2028期间,年复合增长率CAGR为18.2%
  9. Linux系统安装jdk1.6
  10. Cesium可视域分析 不用修改源码