정보보안공부

python_day16_합병정렬, 랜덤합병정렬 본문

Language/python

python_day16_합병정렬, 랜덤합병정렬

Steady_sp 2017. 2. 12. 11:57

*** 합병정렬

 

- 분할 정복기법

- 제자리 정렬이 가능하다.

 

 

-> divide함수를 이용해 주어진 리스트를 나누어준다.

-> // 연산을 이용해 나머지값을 버린 중앙값 mid를 구한다.

-> mid값을 기준으로 배열을 나눈다.

-> 리스트의 길이가 3개이상일 경우 다시 divide함수를 이용해 계속 나눈다.

-> 합병정렬을 이용해 left리스트, right리스트의 원소가 소모될때 까지 진행한다.

-> 0번째 인덱스를 비교한뒤 최소값은 nlists에 저장한뒤 remove를 이용해 지워준다.

-> nlists는 임시로 저장하는 곳이라고 생각하자 merge함수가 불러질때마다 []로 초기화되는것에 주의한다.

-> left와 right의 첫번째 원소들을 모두비교한뒤 한쪽 원소가 모두 비어지면 반대쪽 원소들을 nlists에 추가한다. 

 

# 결과

 

 

*** 합병정렬 랜덤

 

 

-> 랜덤합병정렬은 기존의 합병정렬에 random함수를 이용해 ulists를 랜덤으로 만드는 것이다.

-> 필요한 코드로는 import random을 이용해 random함수를 불러오고

-> random.shuffle(ulists)를 이용해 1부터100까지 순차적으로 작성된 리스트를 랜덤으로 섞는다.

 

# 결과

 

'Language > python' 카테고리의 다른 글

python_day19_상속2  (0) 2017.03.04
python_day18_상속  (0) 2017.02.12
python_day17_클래스  (0) 2017.02.11
python_day15_선택정렬, 랜덤선택정렬  (0) 2017.02.09
python_day14_피보나치 수  (0) 2017.02.09
Comments