首页 > 语言 > JavaScript > 正文

JS实现常见的查找、排序、去重算法示例

2024-05-06 15:33:58
字体:
来源:转载
供稿:网友

本文实例讲述了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;    }  }  var c = Math.floor((s + e) / 2);  if (arr[c] == n) {    return true;  } else {    if (n < arr[c]) {      return find2(n, s, c);    } else {      return find2(n, c + 1, e);    }  }}alert(find2(34, 0, arr.length - 1)); //true false

【边界处理】-----递归,一层一层往下找

//要求数组不重复有顺序/var arr = [12, 23, 34, 45, 56, 67, 78]function find2(n, s, e) {  if (s > e) {    return fasle;  } else if (s == e) {    if (arr[s] == e) {      return true;    } else {      return false;    }  }  var c = Math.floor((s + e) / 2);  if (arr[c] == n) {    return true;  } else {    if (n < arr[c]) {      return find2(n, s, c);    } else {      return find2(n, c + 1, e);    }  }}alert(find2(12, arr.length + 1, 78));

应用

【查找最小值】

var arr = [12, 54, 32, 9, 5, 3, 1, 101, -100, -1000];function findMin(s, e) {  if (s > e) {    return [];  } else if (s == e) {    return arr[s];  } else if (s == e - 1) {    if (arr[s] < arr[e]) {      return arr[s];    } else {      return arr[e];    }  }  var c = Math.floor((s + e) / 2);  var l = findMin(s, c);  var r = findMin(c + 1, e);  if (l < r) {    return l;  } else {    return r;  }}alert(findMin(0, arr.length - 1));            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选