안녕하세요.
PHP를 이용하여 선택정렬을 구현해보고자 해요.
다음과 같이 무작위로 값들이 들어가 있다고 예를 들겠어요.
[34, 21, 11, 67, 9, 45, 15] |
위와 같이 빈 배열에 값이 들어가 있다고 가정하겠습니다.
먼저, 큰 숫자부터 작은 숫자로 정렬을 하는 것부터 해보겠습니다.
큰 숫자부터 작은 숫자로 정렬을 한다면 우리가 원하는 답은 아래와 같겠죠?
[67, 45, 34, 21, 15, 11, 9] |
DB 쿼리에서 정렬 옵션인 DESC에 해당하겠네요. 내림차순 정렬이라고 하죠
원리는 index 0부터 하나씩 비교해가며 위치를 바꾸는 거에요.
$sort_arr = $ar;
for($i = 0; $i < count($sort_arr)-1; $i++) {
for ($j = $i+1; $j < count($sort_arr); $j++) {
if ($sort_arr[$i] < $sort_arr[$j]) {
$tmp = $sort_arr[$j];
$sort_arr[$j] = $sort_arr[$i];
$sort_arr[$i] = $tmp;
}
}
}
위 소스에서 유의하셔야할 부분은 두 번째 반복문의 초기값을 잘 보시면 됩니다. $j의 초기값이 $i+1 이죠?
인덱스 0인 것과 1인 것을 비교하기 위하여 $i 보다 1이 큰 값으로 초기값을 잡았습니다.
여기서의 핵심은 Swap 을 하는 것이에요.
임시변수 하나를 만들어 저장 후, 서로 자리위치를 바꿔주는 거죠. 비교문안에서 말이죠.
위 소스를 구동하면 아래와 같은 우리가 원하는 결과를 얻을 수 있습니다.
[67, 45, 34, 21, 15, 11, 9] |
그럼 오르차순(ASC) 즉, 숫자가 작은 숫자부터 큰 숫자로 정렬하는 방법은 if 문을 수정하면 되겠죠?
$sort_arr = $ar;
for($i = 0; $i < count($sort_arr)-1; $i++) {
for ($j = $i+1; $j < count($sort_arr); $j++) {
if ($sort_arr[$i] > $sort_arr[$j]) {
$tmp = $sort_arr[$j];
$sort_arr[$j] = $sort_arr[$i];
$sort_arr[$i] = $tmp;
}
}
}
위와 같겠네요.
물론 가능하면 문자와 숫자가 썩인 데이터일 경우도 있으니 그때는 타입체크도 필요하겠죠?
그때는 조금 더 코드가 늘어나겠네요. 숫자를 우선시 할지 문자를 우선시 할지도 고려해야하니까요.
그럼 선택정렬에 대한 포스팅은 여기까지로 하고 다음 포스팅은 버블정렬에 대해서 포스팅할게요.
'백엔드 > PHP' 카테고리의 다른 글
[PHP] 이진트리 만들기 (0) | 2023.05.22 |
---|---|
안녕하세요. PHP 분류에 첫글을 올립니다. (0) | 2023.05.09 |