이번에는 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);
[이진 검색]: 계속해서 둘로 나눕니다. 부분, 분할 부분 검색
은 보편적인 방법으로, 반드시 최고는 아니지만 보장된 방법입니다. (분할 정복 방식)
***중간 값을 더하여 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));
[Array deduplication]
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));
Bubble sort 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
배열의 가운데 가져오기 가운데 숫자보다 작은 숫자가 가운데 숫자의 왼쪽에 배치되고, 큰 숫자가 오른쪽에 배치된 다음 두 개의 곱이 linked together
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] hash hash array------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 중국어 웹사이트의 다른 관련 기사도 주목해 보세요!
추천 자료:
Vue 기반 지연 로딩 플러그인 vue-view-lazy를 사용하는 방법
jquery 토글클래스() 속성을 사용하여 배경색을 변경하는 기사 단락을 만드는 방법
위 내용은 JS는 가장 간단한 검색, 정렬 및 중복 제거 알고리즘을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!