这个问题是关于费舍尔-耶茨算法的,该算法用于返回给定数组的随机混洗。在维基百科页面称,其复杂度为O(n),但我认为这是O(n log n)的。
在每个迭代i中,在1和i之间选择一个随机整数。简单地将整数写到内存中就是O(log i),由于有n次迭代,所以总数为
O(log 1)+ O(log 2)+ ... + O(log n)= O(n log n)
天真的算法效果不佳。我在这里想念什么吗?
注意:天真的算法是在(0,1)区间为每个元素分配一个随机数,然后根据分配的数字对数组进行排序。