본문 바로가기
Learning/PythonAlgorithm

파이썬 알고리즘_#02_버블정렬

by HappyStar 2020. 6. 8.
반응형

 

오늘은 가장 기초적인 알고리즘인 버블 정렬을 배워 보도록 하겠습니다. 버블 정렬은 첫 번째 값과 두 번째 값을 비교해서 두 번째 값이 더 작으면 첫 번째 값과 자리를 바꾸는 알고리즘입니다. 아래의 예제를 보며 코드를 해석하겠습니다.

numbers = [3, 7, 8, 2, 5]

def order(arr):
	for f_index in range(0, len(arr)):
    	for s_index in range(f_index+1, len(arr)-1):
        	if arr[f_index] > a[s_index]:
            	temp = a[f_index]
                arr[f_index] = arr[s_index]
                arr[s_index] = temp
	return arr
print(order(numbers))

 

먼저 numbers라는 리스트를 만듭니다. 그리고 order라는 함수를 선언 해준 뒤 매개변수로 arr을 받습니다. 여기서 중첩 for문이 들어가게 됩니다. 중첩 for문이 돌아가는 방식은 다음과 같습니다. 

먼저 3과 나머지들을 비교합니다.

 

그다음으로 7과 나머지들을 비교합니다. 중첩 for문은 이런 방식으로 돌아가게 됩니다. 계속 코드를 해석하겠습니다.

두 번째 for문의 마지막에 -1을 해준 이유는 다음과 같습니다.

 

위 그림과 같이 마지막은 비교할 대상이 없기 때문에 비교를 하지 않아도 됩니다. 그래서 -1을 해주면 결과가 이론적으로 더 빨리 나오게 됩니다. 그다음 if문으로 f_index가 s_index보다 크면 temp변수에 f_index의 값을 저장하고 f_index의

값은 s_index의 값으로 변하게 되고 s_index는 temp변수의 값이 저장 되게 됩니다. 여기서 temp변수를 지정하지 않고 s_index에 f_index를 대입해주어도 괜찮지 않을까요? 그렇게 하면 결과가 다르게 출력이 됩니다. 왜 그럴까요? 코드를 자세히 보면 알 수 있습니다. 파이썬은 코드를 위해서부터 밑으로 해석하게 되는데 f_index의 값이 이미 s_index의 값으로 변환되었기 때문에 위에 temp변수에 먼저 f_index의 값을 저장한 뒤 사용하는 방식을 사용해야 합니다.

중첩 for문이 끝나게 되면 arr을 반환하게 됩니다. 유익하셨다면 공감버튼과 광고를 눌러주세요!

 

반응형

'Learning > PythonAlgorithm' 카테고리의 다른 글

파이썬 알고리즘_#01_약수의 개수 구하기  (7) 2020.04.16

댓글