버블 정렬 알고리즘
3056 단어 sortingbubblesortalgorithms
자바스크립트 구현
function bubbleSort(arr, l) {
let flag;
for (let i = 0; i < l; i++) {
flag = false;
for (let j = 0; j < l - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
let temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = true;
}
}
if (flag === false) {
break;
}
}
return arr;
}
설명
이 함수는 정렬해야 하는 배열과 길이라는 두 개의 매개변수를 받습니다. 배열의 길이를 쉽게 계산할 수 있는 언어를 사용하는 경우 두 번째 매개변수는 필수가 아닙니다.
첫 번째 루프는 배열 순회를 위한 것입니다. 배열의 각 요소를 남아 있는 모든 요소와 비교해야 하기 때문에 중첩 루프가 있습니다. l -1 -i 조건은 피하고 linstead만 사용할 수 있지만 이미 정렬된 요소와 비교하는 것은 유용하지 않기 때문에 알고리즘을 최적화하는 데 도움이 됩니다.
두 번째 루프에는 인접한 요소의 순서가 잘못된지 비교하는 조건이 있습니다(오름차순으로 정렬하는 경우 왼쪽 요소가 오른쪽보다 작아야 하며 내림차순 정렬의 경우 그 반대). . 이 프로세스는 배열 끝에 도달할 때까지 반복됩니다.
2행에는 flag라는 변수가 있습니다. 플래그는 알고리즘을 최적화하는 데도 도움이 됩니다. 첫 번째 루프의 각 랩에 대해 플래그는 거짓으로 재설정되고 잘못된 순서로 있는 요소를 찾으면 플래그가 참으로 설정됩니다. 이 접근 방식은 순회를 계속하는 것이 유용한지 알 수 있도록 도와줍니다. 한 랩 동안 잘못된 순서로 요소를 찾지 못하면 배열이 정렬되었다고 가정할 수 있기 때문입니다.
삽화:
그림으로 설명하자면 다음과 같습니다.
이 배열을 오름차순으로 정렬해야 합니다.
첫 번째 패스:
8은 첫 번째 요소이므로 남은 모든 요소와 비교해야 합니다. 8이 뒤의 요소보다 클 때마다 요소가 바뀌는 식으로 계속됩니다. 우리는 버블 정렬 알고리즘을 사용합니다. 첫 번째 패스에서 가장 높은 값(또는 정렬 순서에 따라 가장 낮은 값)이 목록의 맨 위로 이동합니다. 여기서 8은 목록의 맨 위에 있습니다.
두 번째 패스:
동일한 프로세스가 두 번째 랩에 대해 계속되고 7은 8이 이미 정렬되어 있고 중첩 루프의 이 조건 l -1 -i가 쓸모없는 비교를 방지하기 때문에 8과 비교되지 않습니다.
세 번째 패스:
네 번째 패스:
복잡성 분석:
버블 정렬은 알고리즘이 두 개의 중첩 루프를 사용하고 추가 공간을 사용하지 않기 때문에 공간 복잡도가 O(1)이므로 시간 복잡도는 O(n²)입니다.
결론:
버블 정렬은 시간 복잡도가 O(n²)이기 때문에 배열을 오름차순 또는 내림차순으로 정렬하는 데 도움이 되는 알고리즘이며 복잡도가 그렇지 않을 때 일반적으로 사용됩니다. 중요하거나 짧고 간단한 코드가 선호되는 경우. 이 기사를 읽고 새로운 것을 배우기를 바랍니다.
아무것도 🔺
Reference
이 문제에 관하여(버블 정렬 알고리즘), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/niemet0502/bubble-sort-algorithm-3bgl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)