亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

JS實現常見的查找、排序、去重算法示例

2024-05-06 16:44:32
字體:
來源:轉載
供稿:網友

本文實例講述了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));

【數組去重】

var arr = [1, 2, 3, 4, 5, 4, 3, 4, 5, 2, 1, 4, 2, 1, 5, 7];function findInArr(n, arr) {  for (var i = 0; i < arr.length; i++) {    if (arr[i] == n) {      return true;    }  }  return false;}function removeCopy(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[s], arr[e]]    }  }  var c = Math.floor((s + e) / 2);  var l = removeCopy(s, c);  var r = removeCopy(c + 1, e);  for (var i = 0; i < r.length; i++) {    if (!findInArr(r[i], l)) {      l.push(r[i]);    }  }  return l;}document.write(removeCopy(0, arr.length - 1));

【數組排序】

var arr = [34, 32, 1, 76, 55, -100, 99, 101];function mySort(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], arr[e]];    } else {      return [arr[e], arr[s]];    }  }  //1.切中間值  var c = Math.floor((s + e) / 2);  //2.分半處理  var l = mySort(s, c);  var r = mySort(c + 1, e);  var res = [];  while (l.length > 0 || r.length > 0) {    if (l[0] < r[0]) {      res.push(l.shift());    } else {      res.push(r.shift());    }  }  if (l.length == 0) {    res = res.concat(r);  } else if (r.length == 0) {    res = res.concat(l);  }  return res;}//調用document.write(mySort(0, arr.length - 1));

冒泡排序 BubbleSort

循環,每次拿出兩個值,兩兩比較,如果下一個值比目前的小,那么交換位置

外層循環是循環取數,內層循環是兩兩交換比較

var arr = [ - 122, -2, 5, 6, 73, 34, 5, 2];function BubbleSort(arr) {  for (var i = 0; i < arr.length; i++) {    for (var j = 0; j < arr.length - 1; j++) {      if (arr[j] > arr[j + 1]) {        var tmp = arr[j];        arr[j] = arr[j + 1];        arr[j + 1] = tmp      }    }  }  return arr;}document.write(BubbleSort(arr));

【快速排序】 -------quickSort

取數組中間的數,比中間數小的房中間數左邊,比中間數大的放右邊,再把兩遍鏈接起來

function quickSort(arr, s, e) {  //邊界處理 參與流程  if (arr.length == 0) {    return [];  }  var c = Math.floor((s + e) / 2);  var arrC = arr.splice(c, 1);  var l = [];  var r = [];  for (var i = 0; i < arr.length; i++) {    if (arr[i] < arrC) {      l.push(arr[i]);    } else {      r.push(arr[i]);    }  }  return quickSort(l).concat(arrC, quickSort(r));}var arr = [5, 5, 12, 56, 1, 67, -1, -23 - 1];document.write(quickSort(arr, 0, arr.length - 1));

【散列】 hash 哈希 數組 ------js常用用的結構

添加

var arr = [];arr.length = 0;var cont = 0;function hash_add(n) {  var pos = n % arr.length;  //當空間不足的時候  if (arr[pos]) {    while (arr[pos]) {      cont++;      if (arr[pos] == n) {        return;      } else {        pos++;        if (pos == arr.length) {          pos = 0;        }      }    }    arr[pos] = n;  } else {    arr[pos] = n;  }  //空間不足的時候的擴建  if (cont == arr.length) {    //d等唄擴建    var oldArr = arr;    arr.length = oldArr.length * 2;    arr = [];    for (var i = 0; i < oldArr.length; i++) {      arr.push(oldArr[i]);      count = 0;    }  }}hash_add();

希望本文所述對大家JavaScript程序設計有所幫助。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美综合另类中字| 久久久久久国产精品| 操日韩av在线电影| 国产精品精品国产| 日韩高清欧美高清| 国产v综合v亚洲欧美久久| 国模精品系列视频| 久久天堂av综合合色| 日韩在线免费av| 欧美亚洲在线播放| 中文字幕日韩av综合精品| 欧美性生交xxxxx久久久| 国产97在线播放| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲欧美日本另类| 夜夜狂射影院欧美极品| 亚洲免费视频一区二区| 久久在线精品视频| 95av在线视频| 日韩国产高清污视频在线观看| 日韩专区在线播放| 热门国产精品亚洲第一区在线| 亚洲精品动漫久久久久| 国产成人中文字幕| 亚洲色图校园春色| 欧美精品在线极品| 国产精品视频一区二区三区四| 日韩一区在线视频| 91免费在线视频| 国产精品偷伦免费视频观看的| 88国产精品欧美一区二区三区| 精品一区二区三区四区| 精品视频www| 一本一道久久a久久精品逆3p| 国产美女精品免费电影| 久久久久久高潮国产精品视| 欧美噜噜久久久xxx| 国产又爽又黄的激情精品视频| 欧美影院在线播放| 一区二区三区日韩在线| 久久精品国产视频| 国产一区二区三区四区福利| 国内自拍欧美激情| 91精品视频在线看| 国产精品99蜜臀久久不卡二区| 国产亚洲欧美日韩精品| 国产视频精品在线| 7777精品视频| 久久久久女教师免费一区| 国产专区欧美专区| 国产91免费看片| 国产精品久久久久影院日本| 欧美日韩精品中文字幕| 亚洲欧美国产一本综合首页| 精品国产91久久久久久老师| 尤物yw午夜国产精品视频| 欧美日在线观看| 日日狠狠久久偷偷四色综合免费| 久久乐国产精品| 97久久精品人搡人人玩| 亚洲伦理中文字幕| 成人免费看黄网站| 欧美亚洲在线视频| 成人午夜在线观看| 中文字幕成人在线| 91久久久久久久| 日韩在线视频线视频免费网站| 国产精品偷伦免费视频观看的| 亚洲在线视频福利| 欧美精品videossex88| 国产精品国产自产拍高清av水多| 国产日韩在线视频| 亚洲欧美一区二区三区久久| 欧美国产日韩在线| 亚洲第一av在线| 欧美日韩成人在线视频| 国产丝袜高跟一区| 麻豆精品精华液| 欧美黑人一级爽快片淫片高清| 日韩精品免费在线播放| 国产精品黄色av| 亚洲二区中文字幕| 亚洲网址你懂得| 在线精品91av| 亚洲视频在线观看网站| 欧美激情喷水视频| 日韩精品极品视频| 久久99精品久久久久久噜噜| 国产欧美日韩中文| 国产精品网红福利| 成人av资源在线播放| 色噜噜狠狠狠综合曰曰曰88av| 欧美精品一区二区免费| 91九色综合久久| 色在人av网站天堂精品| 日韩在线激情视频| 91亚洲va在线va天堂va国| 欧美日韩国产色| 成人午夜两性视频| 97国产真实伦对白精彩视频8| 欧美老女人xx| 日韩中文在线中文网三级| 日韩欧中文字幕| 久久在线精品视频| 亚洲国产欧美一区| 国产亚洲一级高清| 色系列之999| 国模视频一区二区| 久热爱精品视频线路一| 麻豆乱码国产一区二区三区| 欧美激情第三页| 日韩在线中文视频| 国产欧美日韩免费看aⅴ视频| 欧美成人性生活| 18性欧美xxxⅹ性满足| 在线精品国产成人综合| 高清欧美性猛交xxxx| 国产精品黄页免费高清在线观看| 精品美女久久久久久免费| 91在线免费观看网站| 国产美女搞久久| 欧美激情区在线播放| 国产精品电影在线观看| 在线视频亚洲欧美| 亚洲国产精品视频在线观看| 日本a级片电影一区二区| 国模精品视频一区二区三区| 国产91精品网站| 欧美亚洲一级片| 亚洲欧洲在线看| 在线观看欧美www| 欧美电影第一页| 国产国语videosex另类| 亚洲欧美日韩精品久久| 欧美激情视频一区| 高清欧美电影在线| 欧美在线观看日本一区| 最近2019中文字幕一页二页| 国产在线观看精品一区二区三区| 尤物99国产成人精品视频| 欧美在线性爱视频| 亚洲天堂成人在线视频| 国产精品久久久久福利| 久久人91精品久久久久久不卡| 国产视频综合在线| 国产欧美一区二区三区视频| 欧美做受高潮电影o| 一道本无吗dⅴd在线播放一区| 国产精品女主播视频| 欧美电影在线观看完整版| 久久久久久久成人| 亚洲精品电影久久久| 91视频-88av| 久久久久久久久久久久av| 国产精品扒开腿做爽爽爽的视频| 激情懂色av一区av二区av| 麻豆乱码国产一区二区三区| 久久亚洲影音av资源网| 日韩电视剧在线观看免费网站| 成人性生交大片免费看小说| 日韩一区二区三区在线播放| 久久精品电影网站| 国内精品久久久久伊人av| 久久免费视频网|