JS实现常见的查找、排序、去重算法示例实现常见的查找、排序、去重算法示例
本文实例讲述了JS实现常见的查找、排序、去重算法。分享给大家供大家参考,具体如下:
今天总结了下排序简单的算法
【自定义排序】
先寻找一个最小的数,然后依次那这个数和数组中其他数字比较,如果发现比这个数字小的数就把这两个数调换位置,然后再
继续寻找下一个最小的数字进行下一轮比较
var arr = [31, 6, 19, 8, 2, 3];
function findMin(start, arr) {
var iMin = arr[start];
var iMinIndex = start;
for (var i = start + 1; i < arr.length; i++) {
if (arr[i] < iMin) {
iMin = arr[i];
iMinIndex = i;
}
}
return iMinIndex;
}
function sort1(arr) {
for (var i = 0; i < arr.length; i++) {
var iMinIndex = findMin(i, arr);
var car;
car = arr[i];
arr[i] = arr[iMinIndex];
arr[iMinIndex] = car;
}
return arr;
}
document.write(sort1(arr));
【线性查找】:一个一个去查找
//不重复 有序
var arr = [0];
for (var i = 1; i < 100000; i++) {
arr[i] = arr[i - 1] + Math.floor(Math.random() * 4 + 1);
}
function find1(n, arr) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] == n) {
return true;
}
}
return false;
}
//测试性能
var t1 = new Date().getTime();
for (var i = 0; i < 10000; i++) {
var n = Math.random() * 10000;
find2(n, 0, arr.length - 1)
}
alert(new Date().getTime() - t1);
【二分查找】:不停的分成两个部分,分部分查找
是一种万能方法,不一定是最好的,但是个保底的方法。(分治法)
***中间值 相加除以二,统一偏左,向下取整
//不重复 有序
var arr = [12, 17, 23, 34, 45, 76, 89];
function find2(n, s, e) {
//边界处理
if (s > e) {
return false;
} else if (s == e) {
if (arr[s] == n) {
return true;
} else {
return false;