bubble sort 예제

두 번째 패스: (1 4 4 2 5 8) – – –> (1 2 4 5 8), 4 > 이후 스왑 2 ( 1 2 4 5 8) – 1 2 4 5 8 ) (1 2 4 5 8) (1 2 4 5 8) – 1 2 4 5 8 ( 1 2 4 5 8) – –> , 배열이 이미 정렬되어 있지만 알고리즘이 완료되었는지 알 수 없습니다. 알고리즘은 정렬된 것을 알기 위해 스왑없이 하나의 전체 패스가 필요합니다. 버블 정렬 알고리즘은 n-th 패스가 n-th 가장 큰 요소를 찾아 최종 위치에 넣는 것을 관찰하여 쉽게 최적화할 수 있습니다. 그래서, 내부 루프는 n-TH 시간 동안 실행할 때 마지막 n – 1 항목을보고 피할 수 있습니다 : 두 번째 패스의 시작부분에, 가장 큰 값은 장소에 지금이다. (n-1) 정렬할 항목이 남아 있으므로 (n-2) 쌍이 있습니다. 각 패스는 다음으로 큰 값을 배치하므로 필요한 패스의 총 수는 (n-1)입니다. (n-1) 패스를 완료한 후 가장 작은 항목은 추가 처리가 필요 없는 올바른 위치에 있어야 합니다. 액티브 코드 1은 전체 bubbleSort 기능을 보여줍니다. 목록을 매개 변수로 사용 하며 필요에 따라 항목을 교환 하 여 수정 합니다. 버블 정렬은 또한 현대 CPU 하드웨어와 제대로 상호 작용하지 않습니다. 삽입 정렬보다 최소 두 배 많은 쓰기, 캐시 누락의 두 배, 그리고 점토학적으로 더 많은 분기 오측을 생성합니다. [인용 필요] Java에서 Astrachan 정렬 문자열에 의한 실험은 삽입 정렬보다 약 1/5 빠르며 선택 정렬보다 70%빠른 버블 정렬을 보여줍니다. [3] $$A [$$$$$)는 $$n$$ 요소의 정렬되지 않은 배열이라고 가정합니다.

이 배열은 오름차순으로 정렬되어야 합니다. 의사 코드는 다음과 같습니다: 버블 정렬은 최종 위치가 알려지기 전에 항목을 교환해야 하기 때문에 가장 비효율적인 정렬 방법으로 간주됩니다. 이러한 “낭비된” 교환 작업은 비용이 많이 듭니다. 그러나 거품 정렬은 목록의 정렬되지 않은 전체 부분을 통과하므로 대부분의 정렬 알고리즘이 할 수 없는 작업을 수행할 수 있습니다. 특히, 패스 중에 교환이없는 경우, 우리는 목록을 정렬해야한다는 것을 알고있다. 목록이 정렬된 것을 발견하면 거품 정렬을 수정하여 일찍 중지할 수 있습니다. 즉, 몇 번의 패스만 필요한 목록의 경우 정렬된 목록을 인식하고 중지한다는 점에서 거품 정렬이 유리할 수 있습니다. ActiveCode 2는 짧은 거품이라고도 하는 이 수정 사항을 보여 주며, 이 수정 사항을 보여 주기도 합니다. 이제 우리는 거품 정렬의 몇 가지 실용적인 측면을 살펴봐야합니다. 유명한 bogosort를 호출 하는 전문 파일 [sic] 비뚤어진 끔찍한 알고리즘”, 또한 거품 정렬 호출 “일반적인 나쁜 알고리즘”.

[4] 도널드 Knuth, 컴퓨터 프로그래밍의 예술에서, 결론 “거품 종류는 그것을 추천 할 것이 없는 것 같다, 캐치 이름과 몇 가지 흥미로운 이론적 인 문제로 이어진다는 사실을 제외하고”, 그 중 일부는 다음 논의. [2] 버블 정렬은 잘못된 순서인 경우 인접 요소를 반복적으로 교환하여 작동하는 가장 간단한 정렬 알고리즘입니다. 스왑이 필요하지 않은 경우 버블 정렬은 배열이 완전히 정렬된다는 것을 알게 됩니다. 버블 정렬은 가장 간단한 정렬 알고리즘이며, 첫 번째 요소가 두 번째 요소보다 큰 경우 처음 두 요소를 비교하고, 교환하고, 인접한 요소의 다음 쌍에 대해 계속 (비교 및 스왑)합니다. 그런 다음 처음 두 요소로 다시 시작하고, 더 이상 스왑이 필요하지 않은 때까지 스왑을 비교합니다. 예를 들어 의사 코드를 이해하려고 시도할 수 있습니다: A = = { 7, 4, 5, 2} 정렬 중에 요소가 이동해야 하는 거리와 방향은 요소가 서로 다른 속도로 이동하기 때문에 거품 정렬의 성능을 결정합니다. 목록의 끝을 향해 이동해야 하는 요소는 연속적인 스왑에 참여할 수 있으므로 빠르게 이동할 수 있습니다. 예를 들어 목록에서 가장 큰 요소는 모든 스왑에서 승리하므로 첫 번째 패스에서 정렬된 위치로 이동합니다. 반면에 목록의 시작 부분으로 이동해야 하는 요소는 패스당 한 단계보다 빠르게 이동할 수 없으므로 요소는 매우 느리게 시작 방향으로 이동합니다.