JS位向量快速排序和查找
一、位向量快速排序:
<script type=text/javascript >
var i = 100000, arr = [];
while (i --) {
arr.push(i + 1);
}
arr.sort(function(){return Math.random() > 0.6});
// -----------------------------------------------
var t = new Date();
var i = arr.length, j = 100001, bit = [], jsout = [];
while (i --) {
bit[arr[i] >> 5] |= (1 << (arr[i] & 0x1f));
}
while (j --) {
if (bit[j >> 5] & (1 << (j & 0x1f))) {
jsout[jsout.length] = j;
}
}
t = new Date() - t;
// ------------------------------------------------
alert("排序时间为:" + t + "毫秒\n");
alert("排序结果为:" + jsout.join("\n"));
</script>
<script type=text/javascript >
var i = 100000, arr = [];
while (i --) {
arr.push(i + 1);
}
m = arr.splice(Math.random() * arr.length, 1);
n = arr.splice(Math.random() * arr.length, 1);
o = arr.splice(Math.random() * arr.length, 1);
p = arr.splice(Math.random() * arr.length, 1);
q = arr.splice(Math.random() * arr.length, 1);
arr.sort(function(){return Math.random() > 0.6});
// -----------------------------------------------
var t = new Date();
var i = arr.length, j = 100001, k = 0, bit = [], jsout = [j], check = [];
while (i --) {
bit[arr[i] >> 5] |= (1 << (arr[i] & 0x1f));
}
while (j --) {
if (bit[j >> 5] & (1 << (j & 0x1f))) {
jsout[1] = jsout[0], jsout[0] = j;
k = jsout[1] - jsout[0];
if (k == 2) {
check = check.concat([jsout[0] + 1]);
}
if (k == 3) {
check = check.concat([jsout[0] + 1, jsout[0] + 2]);
}
if (k == 4) {
check = check.concat([jsout[0] + 1, jsout[0] + 2, jsout[0] + 3]);
}
if (k == 5) {
check = check.concat([jsout[0] + 1, jsout[0] + 2, jsout[0] + 3, jsout[0] + 4]);
}
if (k == 6) {
check = [jsout[0] + 1, jsout[0] + 2, jsout[0] + 3, jsout[0] + 4, jsout[0] + 5];
}
}
jsout.length = 2;
if (check.length == 5) break;
}
if (jsout[0] == 2) {
check = check.concat([1]);
}
if (jsout[0] == 3) {
check = check.concat([1, 2]);
}
if (jsout[0] == 4) {
check = check.concat([1, 2, 3]);
}
if (jsout[0] == 5) {
check = check.concat([1, 2, 3, 4]);
}
if (jsout[0] == 6) {
check = [1, 2, 3, 4, 5];
}
check.length = 5;
t = new Date() - t;
// ------------------------------------------------
document.write("随机抽取的5个数为:" + m + " 和 " + n + " 和 " + o + " 和 " + p + " 和 " + q + "<br/>");
document.write("找到抽取的5个数为:" + check.join(" 和 ") + "<br/>");
document.write("查找时间为:" + t + "毫秒");
</script>
<script type=text/javascript >
var i = 100000, arr = [], m = n = o = p = q = 0;
while (i --) {
arr.push(i + 1);
}
m = arr.splice(Math.random() * arr.length, 1);
n = arr.splice(Math.random() * arr.length, 1);
o = arr.splice(Math.random() * arr.length, 1);
p = arr.splice(Math.random() * arr.length, 1);
q = arr.splice(Math.random() * arr.length, 1);
arr.sort(function(){return Math.random() > 0.6});
// -----------------------------------------------
var t = new Date();
var i = arr.length, j = 100001, k = d = 0, bit = [], jsout = [j], check = [];
while (i --) {
bit[arr[i] >> 5]
------解决方案--------------------
= (1 << (arr[i] & 0x1f));
}
while (j --) {
if (bit[j >> 5] & (1 << (j & 0x1f))) {
jsout[1] = jsout[0], jsout[0] = d = j;
k = jsout[1] - jsout[0];
if (k == 2) {
check[check.length] = j + 1;
} else if (k > 2) {
while (-- k) {
check[check.length] = j + k;
}
}
}
jsout.length = 2;
if (check.length == 5) break;
}
if (d) {
while (d --) {
check[check.length] = d;
}
}
check.length = 5;
t = new Date() - t;
// ------------------------------------------------
document.write("随机抽取的5个数为:" + m + " 和 " + n + " 和 " + o + " 和 " + p + " 和 " + q + "<br/>");
document.write("找到抽取的5个数为:" + check.join(" 和 ") + "<br/>");
document.write("查找时间为:" + t + "毫秒");
</script>
<script type=text/javascript >
var i = 100000, arr = [], m = n = o = p = q = 0;
while (i --) {
arr.push(i + 1);
}
m = arr.splice(Math.random() * arr.length, 1);
n = arr.splice(Math.random() * arr.length, 1);
o = arr.splice(Math.random() * arr.length, 1);
p = arr.splice(Math.random() * arr.length, 1);
q = arr.splice(Math.random() * arr.length, 1);
arr.sort(function(){return Math.random() > 0.6});
// -----------------------------------------------
var t = new Date();
var i = arr.length, j = 100001, k = d = 0, bit = [], jsout = [j], check = [];
while (i --) {
bit[arr[i] >> 5]