ホームページ > 記事 > ウェブフロントエンド > JS は最も単純な検索、並べ替え、重複排除アルゴリズムを実装します。
今回は、JS で実装された最も簡単な検索、並べ替え、重複排除のアルゴリズムをお届けします。JS で検索、並べ替え、重複排除を実装するための 注意事項 とは何ですか。
今日は並べ替えの簡単なアルゴリズムをまとめました【カスタマイズされた並べ替え】まず最小の数値を見つけて、この数値より小さい数値が見つかった場合は、これらの2つの数値を入れます。数値の位置を変更し、次の比較で次に小さい数値を探し続けます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));[線形探索]: 1 つずつ探索します
//不重复 有序 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);[は普遍的な方法であり、必ずしも最良であるとは限りませんが、保証された方法です。 (分割統治法)***真ん中の値を足して2で割って左に統一して切り捨てる
//不重复 有序 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));【
配列sort】
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
をループし、毎回2つの値を取り出して比較します次の値が現在の値より小さい場合、位置が交換されます外側のループは数値を取得するループであり、内側のループはペアを交換して比較します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配列の中央を取得 中央の数値より小さい数値を中央の数値の左側に、大きい数値を右側に配置し、その後2回がリンクされています
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 でよく使われる構造体
Add
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();この記事の事例を読んだ後、あなたはメソッドをマスターしたと思います。 php 中国語 Web サイトの他の関連記事にも注目してください。 推奨読書:
Vue ベースの遅延読み込みプラグイン vue-view-lazy の使用方法
jquery toggleClass() 属性を使用して記事の段落を作成し、背景色を変更する方法
以上がJS は最も単純な検索、並べ替え、重複排除アルゴリズムを実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。