当前位置: 首页 > Web前端 > JavaScript

算法题:ShuffleAlgorithm

时间:2023-03-27 15:22:04 JavaScript

之前面试测试了ShuffleAlgorithm,写的比较简单。核心思想如下:创建一个空的结果数组;依次从原数组中随机抽样,然后将结果按顺序推送到数组中;为了防止碰撞,每次采样后从原数组中删除该元素;其实还有一种方法可以从原数组中按顺序取出元素,然后在新数组中随机放置,但是这样不能消除碰撞问题functionshuffle(arr){letlen=arr.length;让res=[];for(leti=0;i(arr:T[],a:number,b:number){设temp=arr[a];arr[a]=arr[b];arr[b]=temp;}导出函数shuffle(arr:T[]):T[]{for(leti=arr.length-1;i>=0;i--){让r=randomIndex(i);swap(arr,r,i);}returnarr;}constres=shuffle<数字>([1,2,3,4,5,6]);控制台日志(资源);从代码中可以看出,每一步都是从数组中随机抽取元素,放在数组的末尾,然后指针前进一位,继续从数组的其余部分中抽取元素数组,把它们放到数组的末尾,在这个过程中以此类推,最后整个数组的元素都会被打乱。实现的思路其实和我之前的代码是一样的,但是有两个改进:没有新建数组,空间复杂度为O(n);元素交换的方法避免了由于从数组中删除元素而需要移动其他元素下标元素的问题,时间复杂度为O(n);