이룰수 없는 꿈을 꾸고 이길수 없는 적과 싸우며, 이룰수 없는 사랑을 하고 견딜 수 없는 고통을 견디고, 잡을수 없는 저 하늘의 별도 잡자. - 세르반테스

백엔드/PHP

[선택정렬] PHP로 선택정렬 구현

별구르미 2023. 6. 9. 09:09

안녕하세요. 

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