정렬 알고리즘: 버블 정렬
7142 단어 codenewbiealgorithms
정렬 알고리즘?
따라서 "정렬 알고리즘이 정확히 무엇입니까?"가 궁금할 것입니다. 음, 정렬 알고리즘은 단순히 주어진 배열이나 일부 요소 목록을 오름차순 또는 내림차순으로 재정렬하는 데 사용됩니다. 데이터 구조에서 요소의 새 순서를 결정하는 비교 연산자를 사용합니다.
예를 들어 정렬되지 않은 숫자의 배열이 있는 경우 알고리즘에서 오름차순으로 정렬하기를 원했습니다.
[3,5,7,1,2] => [1,2,3,5,7]
버블 정렬
이제 버블 정렬 알고리즘은 이해하기 가장 간단한 정렬 알고리즘 중 하나입니다. 버블 정렬은 인접한 요소의 순서가 잘못된 경우 반복적으로 교체하여 작동합니다. 배열에서 가장 작은 것에서 가장 큰 것으로 오름차순이라고 가정해 봅시다.
여기에서 정확히 무슨 일이 일어나고 있습니까?
여기서 버블 정렬 알고리즘이 수행하는 작업은 모든 단일 반복을 통해 각 정수 쌍을 지속적으로 비교하여 코드를 설계하는 방법과 관련하여 두 정수를 배치할 위치를 결정하는 것입니다. 위의 예에서는 가장 작은 것부터 큰 것까지 오름차순으로 정렬합니다.
의사 코드
다음은 __bubble 정렬 알고리즘을 구현하는 방법을 시작하기 위한 몇 가지 단계입니다.
[3,5,7,1,2] => [1,2,3,5,7]
코드
function bubbleSort(arr){
for(let i = arr.length - 1; i > 0; i++){
for(let j = i -1; j < arr.length; j++){
if(arr[j] > arr[j + 1]){
var temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
return arr
}
이 코드를 잘 살펴보면 아직 끝나지 않았습니다! 데이터가 거의 정렬되었거나 이미 정렬된 시나리오에서는 다시 정렬할 필요가 없습니다. 그러나 현재 버블 정렬 알고리즘은 배열이 어느 정도 또는 이미 존재하는지 여부를 고려하지 않습니다. 길이가 32 이상인 배열이 있는 경우 이러한 종류의 논리는 불필요한 공간을 차지합니다.
이를 방지하기 위해 코드 내에서 "여기서 스왑을 수행했습니까?"라고 묻는 검사를 수행할 수 있습니다. 그렇지 않은 경우 반복을 완료해야 합니다.
최적화
따라서 불필요한 스와핑이 발생하지 않도록 이 코드를 최적화하기 위해 부울을 받는 noSwaps 변수를 사용할 수 있습니다.
function bubbleSort(arr){
var noSwaps;
for(let i = arr.length - 1; i > 0; i++){
noSwaps = true
for(let j = i -1; j < arr.length; j++){
console.log(arr, arr[j], arr[j + 1])
if(arr[j] > arr[j + 1]){
var temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
nSoSwaps = false
}
}
if(noSwaps) break
}
return arr
}
여기서 반복 내에서 더 이상 스왑이 없으면 코드에서 벗어나 배열을 반환해야 합니다. 이것은 가능한 스왑을 위해 영역을 반복하는 코드의 불필요한 작업을 제거합니다.
결론
이것으로 버블 정렬에 대한 블로그를 마칩니다! 선택 정렬에 초점을 맞춘 다음 블로그를 기대해 주세요.
Reference
이 문제에 관하여(정렬 알고리즘: 버블 정렬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/keeks5456/sorting-algorithms-bubble-sort-2c8b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)