버블 정렬
거품의 원리는 가장 큰 요소 또는 가장 작은 요소 "float"를 만드는 것입니다.
정렬 삽입, 정렬, 빠른 정렬, 버블 정렬은 모두 비교 정렬입니다.
아이디어
인접한 두 숫자를 하나씩 비교하고 소수점을 앞에 놓고 큰 숫자를 뒷면에 넣으십시오.
1 단계 : 첫 번째와 두 번째 숫자를 비교하고, 소수점을 이전과 그 이후에 넣습니다. 두 번째 숫자와 세 번째 숫자를 비교하고, 큰 숫자 전후 소수점을 넣고, 마지막 두 숫자를 비교할 때까지 이렇게 계속하십시오.
2 단계 : 두 번째 여행에서 : 첫 번째 로그에서 시작하십시오 (두 번째 숫자와 세 번째 숫자로 인한 것이기 때문에 첫 번째 숫자는 더 이상 두 번째 숫자보다 작지 않을 수 있기 때문에 큰 숫자를 전후에 배치 한 후 십진수를 두 번째 숫자까지 비교하십시오 (첫 번째 위치는 이미 두 번째 위치에서 가장 큰 위치). 두 번째 여행이 끝나면 두 번째 위치에서 새로운 최대 수가 얻어집니다 (실제로 전체 시퀀스에서 두 번째로 큰 숫자).
이것이 계속되면 정렬이 완료 될 때까지 위의 프로세스를 반복하십시오.
소마는 항상 앞으로 배치되고 분류 공정 중에 많은 수가 거품의 상승과 동일하기 때문에 거품 분류라고합니다.
버블 분류 애니메이션 효과
구현 :이 코드는 비교적 간단하며 알고리즘에서 가장 기본적이고 기본적인 코드입니다. . .
주목해야 할 세 가지
1. 클래스를 교환하는 방법은 a = [b, b = a] [0]로 JavaScript로 해결할 수 있습니다.
바꾸다
코드 사본은 다음과 같습니다.
var, a, b, temp
온도 = A;
a = b;
b = 온도
이 교환 방법
2. 배열이 캐시 된 루프 변수의 캐시에주의를 기울이십시오.
3. 임베디드 루프에주의를 기울이는데, 이는 첫 번째 숫자에서 N 번째 마지막 숫자와 비교하는 것입니다. N은 비교 단계 번호입니다.
함수 bubblesort (array) {var l = array.length; for (var i = 0; i <l; i ++) {// 비교 된 단계의 수는 (var j = 0; {array [j] = [array [j -1], array [j -1] = array [j]] [0] // 여기에 요소를 스왑}} (var k = 0; k <l; k ++) {console.log (array [k]+","); [6,54,6,22,7,8,2,34]; Bubblesort (a);애니메이션 효과
삽입 정렬
매우 간단합니다. 카드를 터치하고 삽입하는 단계입니다!
아이디어 :
1 먼저, 우리가 카드를 만졌다 고 가정 해 봅시다.
2 다음 카드를 꺼내서 a로 설정하고 모든 카드에서 비어있는 모든 카드에서 뒤로 스캔합니다 (이미 정렬).
3 손에있는 카드가 비어있는 [빈.length-n] (정렬)가 새 요소보다 크면 카드를 다음 위치로 이동 (릴리스 공간) 비어 있습니다 [빈.length-n] = 비어있는 [empty.length-n+1]
4 repeat 3 단계 정렬 된 카드가 비어있을 때까지 [빈.length-n]이
5이 위치에 a를 삽입하십시오 [empty.length-n] = a
6 단계 2를 반복하십시오
그러나 JavaScript 코드는 여전히 구현하기가 약간 어렵고 코드는 다음과 같습니다.
함수 삽입 (arr) {var l = arr.length; vally = []; // 비어있는 배열, 우리의 손이 비어 있음을 나타냅니다. if (arr [i]> empty [empty.length] = empty [empty.length] = arr [i]} // 순서대로 비어있는 것보다 크면 (var j = empty.length; j> 0 && arr [i] <empty [J -1]; ARR <특정 분기 배열을 할 때 이동할 필요가 없습니다. 빈 [j] = 빈 [j -1]; // 비워진 [j -1] = ARR [i]; // 값을 빈 위치에 넣습니다} // console.log (빈)} return empty}그런 다음 여기서 더 중요한 지식은 && 기호입니다. 즉, "및", 즉, 표현이 확립되기 전에 양쪽의 조건을 충족해야합니다.
예를 들어 (a) {fun ()}이 && b와 같다면 && 기호는 또한 대체 할 수 있습니다.
또 다른 매우 중요한 요점
배열이 ARR이라고 가정하면 "마지막 항목"은 ARR [ARR.Length-1]입니다.
정렬 애니메이션
선택 정렬
또한 간단한 정렬 알고리즘입니다.
아이디어 :
가장 작은 요소를 찾으십시오 - 배열에 던지십시오 - 작은 것을 다시 찾으십시오 - 배열에 넣습니다.
먼저, 분류되지 않은 배열에서 가장 작은 요소를 찾으십시오. 찾은 방법은 연속 판단 및 할당의 수단을 사용할 수 있습니다.
그런 다음 배열을 반복하십시오. 배열의 두 번째 요소가 그보다 작 으면 두 번째 요소는 가장 작은 요소이며 "0"을 "1"으로 업데이트합니다.
횡단 후, 우리는이 시리즈에서 가장 작은 요소의 첨자가 "n"이라는 것을 알고 있습니다. 분류 시퀀스의 시작 위치에 꺼내어 저장됩니다 (Array [n]).
그런 다음 나머지 분류되지 않은 요소에서 가장 작은 요소를 계속 찾은 다음 정렬 된 시퀀스의 끝에 놓습니다. 현재 트래버스 첨자는 현재 1에서 시작합니다. 우리는 이미 가장 작은 요소를 선택했기 때문입니다.
모든 요소가 정렬 될 때까지.
함수 selectSort (array) {var min; var l = array.length; // cached length for (var i = 0; i <l; i ++) {// 총 1 회 루프, 루프가 1 배, l elements min = i; // 첫 번째 요소는 가장 작은 요소라고 가정합니다 (var j = i+1; j <l; j ++) (Array [min]> array [j]) // 후속 min = j; // "Minimum"subscript}를 업데이트하는지 (min! = i) {// 동일한 배열에서 작동하기 때문에 요소를 직접 교환 할 수 있습니다. 예를 들어, 배열의 첫 번째 항목은 i이고 가장 작은 요소는 배열 [min]이라는 것을 알았 으므로이 최소를 i로 교환해야합니다. 등. 배열 [i] = [array [min], array [min] = array [i] [0]; // 스왑 요소}} return array;}여기서 여전히 언급 된 것은 Exchange Array의 쓰기 방법 [i] = [min], array [min] = array [i]] [0]입니다.
배열 [i] 및 배열 [min] ~를 쉽게 교환하기 쉽습니다
정렬 애니메이션
빠른 정렬
빠른 정렬은 현재 가장 강력한 정렬 알고리즘으로 재귀 아이디어를 활용합니다.
아이디어
배열에서 요소를 선택하는 것을 "벤치 마크"라고합니다. 길이/2를 사용하여 직접 선택할 수 있습니다
배열을 통해 반복하면 참조 값보다 작은 모든 요소가 참조 앞에 배치되며 참조 값보다 큰 모든 요소가 참조 뒤에 배치됩니다 (동일한 숫자는 양쪽에 사용될 수 있음). 평신도의 관점에서, 남자는 왼쪽에 서 있고 여자는 오른쪽에 서 있습니다. .
그런 다음 벤치 마크 + 배열 rarray보다 작은 부품으로 구성된 배열 배열 = 배열 Larray가 벤치 마크보다 큰 부품으로 구성됩니다.
그러면 우리는 "동일한"프로세스 Larray와 Rarray ~ 만 있으면됩니다.
이를 위해서는 재귀 쓰기를 사용해야합니다. 처리 후 Larray는 Larray의 벤치 마크로 나뉘며 Larray의 벤치 마크보다 작고 Larray의 벤치 마크보다 큽니다. .
그런 다음 우리는 계속 일을하고 남자는 왼쪽에 서서 여자는 오른쪽에 서 있습니다. .
우리가 Larray의 길이가 1이되었고, 이는 다시 나뉘어지기에 충분하지 않다는 것을 알기 전까지는 분류가 끝났다고 생각합니다.
함수 QuickSort (arr) {var l = arr.length; // 캐시 된 배열 길이 if (arr.length <= 1) {return arr}; // Larray와 Rarray 길이가 1보다 작 으면 ~ var num = math.floor (arr.length/2); // 배열 중간에서 숫자를 선택할 필요가 없습니다. 길이/2가 반드시 정수 일 필요는 없습니다. Math.floor를 사용하여 var.splice (num, 1) [0]; // 스플 라이스 메소드를 사용하여 요소를 사용하고, 구문 var 왼쪽 = []; // 왼쪽 참조 컨테이너 생성 var var = []; // 오른쪽 참조 컨테이너를 만듭니다 (var i = 0; i <l; i += 1). 왼쪽 .push (arr [i]) : 오른쪽 .push (arr [i]); // 남자는 왼쪽에 서 있고 여자는 오른쪽에 서 있습니다. . } retucksort (왼쪽) .concat ([numValue], QuickSort (오른쪽)) // 재귀 적으로 왼쪽 및 오른쪽 배열에서 계속 작동합니다. }애니메이션 효과 :
여기서 arr.splice (num, 1)는 하나의 숫자 만 그려 지지만 스플 라이스의 결과는 배열이기도하며 [0]이 필요합니다. 그렇지 않으면 결과는 이상하게 다양한 배열 (1)입니다. . .
Splice Reference : //www.vevb.com/w3school/js/jsref_splice.htm
Math.floor는 수학 대상 //www.vevb.com/w3school/js/js_obj_math.htm에 대한 참조입니다
재귀는 무엇입니까? http://baike.baidu.com/view/96473.htm
빠른 정렬 외에도 위의 4 가지 알고리즘은 모두 간단한 정렬 알고리즘이며,이 4 가지 알고리즘은 인터뷰 중에 매우 자주 촬영됩니다 ~
위의 알고리즘이 루프와 배열에 대한 많은 관련 지식을 사용한다는 점을 여기서 강조하는 것이 여전히 중요하므로 암기해야합니다!