"거품 정렬"의 두 판 사이의 차이

12번째 줄: 12번째 줄:
<?php
<?php
function xmp_print($arr) { echo '<xmp>'; print_r($arr); echo '</xmp>'; }
function xmp_print($arr) { echo '<xmp>'; print_r($arr); echo '</xmp>'; }
function bubble_sort(&$arr) {
function bubble_sort(&$arr) {
$size = count($arr);
$size = count($arr);
for($i=0; $i<$size; $i++) {
for($i=0; $i<$size; $i++) {
for($j=0; $j<$size-$i-1; $j++) {
for($j=0; $j<$size-$i-1; $j++) {
if($arr[$j+1] < $arr[$j]) {
if($arr[$j+1] > $arr[$j])
$arr[$j] ^= $arr[$j+1] ^= $arr[$j] ^= $arr[$j+1]; // swap
$arr[$j] ^= $arr[$j+1] ^= $arr[$j] ^= $arr[$j+1]; // swap
}
}
}
}
}

2013년 10월 21일 (월) 04:17 판

1 개요

bubble sort, sinking sort
거품 정렬, 버블 정렬, 버블 소트
  • 두 인접한 원소를 검사하여 정렬하는 방법
  • 제일 큰 값을 맨 뒤로 보내는 일[1]을 반복
  • 시간 복잡도: [math]\displaystyle{ O(n^2) }[/math]
  • 상당히 느리지만 코드가 단순하고 직관적임
  • 교환 정렬의 하나

2 예시

<?php
function xmp_print($arr) { echo '<xmp>'; print_r($arr); echo '</xmp>'; }

function bubble_sort(&$arr) {
	$size = count($arr);
	for($i=0; $i<$size; $i++) {
		for($j=0; $j<$size-$i-1; $j++) {
			if($arr[$j+1] > $arr[$j])
				$arr[$j] ^= $arr[$j+1] ^= $arr[$j] ^= $arr[$j+1]; // swap
		}
	}
}

$arr = range(1,10);
shuffle($arr);
xmp_print($arr);
bubble_sort($arr);
xmp_print($arr);
if($arr[$j+1] < $arr[$j])에서 부등호 방향을 반대로 하면 내림차순이 된다.
→ 예제: http://jmnote.com/php/bubble_sort.php

3 같이 보기

4 주석

  1. 또는 제일 작은 값을 맨 앞으로 보내는 일

5 참고 자료

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}