长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的swap 请设计并实现排序. google笔试小题.题目来源:http://wenku.baidu.com/view/5aa818dda58da0116c17498b.html休闲小题. 2个key 一个是只能与0 swap,另一个是数组的下标和值是一一对应的. 第二个容易被忽略.所以读到一个元素时,如果值和下标不等,那么可以直接把这个元素的值放到正确位置上去,目标位置的值挪回来.当然这个过程要借助元素0来完成. 假设输入是 2,0,…
void sort(int* arr, int len) { if (!arr) { return; } for (int i = 1; i < len; ++i) { while (arr[0] != 0) { swap(arr[arr[0]], arr[0]); } i = 1; while (i < len) { if (arr[i] == i) { i++; } else { int tmp = arr[i]; swap(arr[0], arr[tmp]); swap(arr[tmp]…
网上看的数组乱序输出,要么不合实际,要么代码繁琐.自己试了下,希望能给大家带来帮助. 重要思想也是Math.random*arr.length随机下标,然后删除取到的元素,继续随机下标. //将数组乱序输出 var arr = [1,2,3,4,5,6,7,8,9,10]; var newArr = []; for(var i=0; i<arr.length; i++){ var index = Math.floor(Math.random()*arr.length);//随机下标 newArr…
数组乱序的意思是,把数组内的所有元素排列顺序打乱. 常用的办法是给数组原生的sort方法传入一个函数,此函数随机返回1或-1,达到随机排列数组元素的目的. 复制代码代码如下: arr.sort(function(a,b){ return Math.random()>.5 ? -1 : 1;}); 这种方法虽直观,但效率并不高,经我测试,打乱10000个元素的数组,所用时间大概在35ms上下(firefox) 本人一直具有打破沙锅问到底的优良品质,于是搜索到了一个高效的方法.原文见此 复制代码代码…
这是最近面试遇到的,不过忘记了,之前也有印象刷到过这道题,就再次记录一下加深印象吧,听到最多的答案是利用sort方法,不过也有说这种方法不好,利用了快排和插入排序,那就整理下吧 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=devi…
Function.prototype.call = function(context,...args){ var context = context || window; context.fn = this; var result = eval(`context.fn(...args)`); delete context.fn; return result; } call的实质就是调用函数时候改变函数中this的指向,利用对象中函数调用时候 this指向这个对象的特性我们给函数加上fn属性,指向…
前言 先看一个段代码 function randArr (arr) { return arr.sort(() => { return (Math.random() - 0.5); }); } 目的是为了实现给定数组的乱序. 利用数组的sort方法,判断随机出来的0~1的值与0.5的大小,实现伪排序. 为什么说是伪排序呢?代码的逻辑没毛病啊. 对,从这个层面来看,简单明了,完美的实现了需求,本着凡事往祖坟刨得精神.来看看这段代码的内部实现. 浏览器实现 ECMA Script The elemen…
JAVA的Collections类中shuffle方法模拟了“洗牌”动作可以对list列表进行随机排序.如果一定要自己写,算法也很简单:假设数组array长度为n.用标准随机函数rand(n)生成[0, n-1]之间的一个随机数,将array[n-1]和array[rand(n)]交换,这样就把array[n-1]位置上的数确定了:再将array[n-2]和array[rand(n-1)]交换,确定array[n-2]位置上的数;再将array[n-3]和array[rand(n-2)]交换,确…
相关资料MSDN:RNGCryptoServiceProvider   Random   Guid private static RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider(); static void Main(string[] args) { ]; ]; ]; //加密型强随机值序列填充字节数组(非零值) rngCsp.GetNonZeroBytes(byt1); Console.WriteLine("rngC…
按照random随机给出的index,进行两两交换,当然也存在与上一次一样的数组结果.官方还有一种ICompare的比较器,只是打乱顺序这个没用起来,不知道该怎么搞,╮(╯_╰)╭ public static List<T> SortRandom<T>(this List<T> collection) { for (int i = collection.Count - 1; i > 0; i--) { Random rand = new Random(); int…