정렬 알고리즘 파이썬 (b)

힙 정렬 # 1 
# 기본적인 아이디어 1. 번호의 초기리스트 (R1은 R2는, ..., Rn의 소트 ) 스택의 상단보다 크게 구성이 스택은 정렬되지 않은 초기 목록
# 2 스택의 맨 마지막 요소 R1 스위칭 소자를 Rn 새로운 정렬되지 않은리스트 (R1, R2, ..., Rn의 획득이 시간 -1) 및 새로운 주문 목록이 (Rn)
R1을 위반할 수있는 새로운 스택의 교환 후, 스택의 상단 이후 # 3 사이트, 그것은 (R1은 R2는, ..., Rn의이 정렬되지 않은리스트에 필요한 -1) 새로운 스택에 적응은
, (# R1 및 정렬되지 않은리스트가 다시 마지막 스위칭 소자가 새로운 순서화 목록을 얻 R1 R2는, ..., RN-2)와 새로운 순서리스트 (중. -1- Rn으로의 Rn에).
소자의 수는 N-1의 순서리스트 때까지 #이 과정이 반복되고, 전체 정렬 처리는 완료된다.

각 노드의 크기와 자식 노드 (RI <R2i, 리 <R2i에서 #sift_down 비교하여 + 1)에 위치 된 스택의 최상위의 최대 번호
DEF sift_down (numlist 시작, 종료)
루트 = 시작
그동안 사실 :
어린이 = 2 * 루트 + 1.
IF 어린이> 완료 :
BREAK
IF 어린이 + 1 <= 엔드 numlist [어린이] <numlist [어린이 + 1이다.].
어린이 + = 1.
IF numlist [루트] <numlist [어린이]
numlist [루트] numlist [어린이] = numlist [어린이] numlist [루트]
루트 = 어린이
다른 :
BREAK

DEF의 heap_sort (numlist) :
대형의리스트 # 초기 스택 최상부
렌 제 = (numList) // 2 - 1
대한 반전의 시작 (범위 (0, 먼저 + 1).) :
sift_down (numlist 시작, 렌 (numlist) -1)
인쇄 (numlist)
#을 N-1 요소 힙 전에, 마지막의 최대 수를 배치 조정
: 최종 범위 (렌 (numlist) -1, -1 0)에 대한
numlist [0] numlist [종료] = numlist [종료] numlist [0]
sift_down (numlist 0 ,. 1 엔드)
인쇄 ( numlist)
복귀 numlist의
전단 (heap_sort은 ([16 ,. 7, 3,20,17,8,99,76는]))
# 1 [99, 76, 16, 20이다 ,. 17 ,. 8 ,. 3 ,. 7]
# [76, 20, 16, 7, 17, 8, 3, 99]
# [20, 17, 16, 7, 3, 8, 76, 99]
# [17, 8, 16, 7, 3, 20, 76, 99]
# [16, 8, 3, 7, 17, 20, 76, 99]
# [8, 7, 3, 16, 17, 20, 76, 99]
# [7, 3, 8, 16, 17, 20, 76, 99]
# [3, 7, 8, 16, 17, 20, 76, 99]


# 병합 정렬 :
# 기본적인 아이디어 : 제 병합 정렬 최종 분석 아이디어 또는 분할 통치에서 이분법을 사용. 긴 배열이 두 가지가 왼쪽 분할 된 유지에 도착하고 오른쪽
# 다음이 재귀 포인트 아래로. 그리고 그들은 합병에 따른 두 개의 명령 배열처럼 보인다.
실시 예 번호 [4,7,8,3,5,9]
# 단계 : 점수 : [4,8,7] [3,9,5] -> [4,8] [7] [3,9 [5] -> [4] [8] [7] [3] [9] [5]
# 단계 : 및 [4,8] [7] [3,9] [5] -> [ 4,7,8] [3,5,9] -> [3,4,5,7,8,9]

DEF 병합 (a, b)이 경우 A와 B # 이미 정렬리스트
C = []
H = J = 0
그동안 J <렌 (a) 및 H <렌 (b)의 모든 요소가 배출 될 때까지 순차적 # A 또는 B를 비교 한
경우, A [J] [H] <B :
c.append (a [J])
J + = 1.
다른 :
c.append ([H] b)
. H + = 1
IF J는 == 렌 (a) :
# 때 나머지 레인 B 위에 행의 모든 요소 순차적 요소로 C
: B에 대한 I [H :]
c.append (I)
다른 :
# 행의 모든 요소가 완료된 B, C로 시퀀스의 나머지 요소
A의 I 대 [J :]
c.append (I)
복귀 C의

# 재귀
DEF의 머지 소트 (numlist)
인쇄 (numlist)
. (numlist) <= 1 렌 IF :
리턴 numlist
중간 = 렌 (numlist) / 2
좌 = 머지 소트 (numlist [: )] 중간
오른쪽 = 머지 소트 (numlist [중간 :])
좌측 창 병합 (오른쪽)
인쇄 (머지 소트 (1,2, -1,8,6,7, -2]))
#를 [1, 2, -1, 8, 6, 7, -2]
# [1,2, -1]
# [1]
# [2, -1]
# [2]
# [-1]
# [8, 6, 7, -2]
# [8,6]
# [8]
# [6]
# [7 - 2
# [7]
# [-2]

#遍历法
DEF mergesort1 (numList)
lenList = LEN (numList)
동안 lenList> 1 :
newList = []
경우 lenList % 2 == 0
내지위한 I (lenList / 2)
A = [numList [2 * I]의 경우 유형 (numList [2 * I]) == INT 다른 numList [2 * i]는
B = [numList [2 * I + 1]의 경우 유형 (numList [ 2 * I + 1]) == INT 다른 numList [2 * I + 1]
newList.append (병합 (a, b))
numList = newList
lenList = LEN (numList)
다른 :
대 전 범위 (lenList / 2) :
A = [numList [2 * I]의 경우 유형 (numList [2 * I]) == INT 다른 numList [2 * I ]
B = [numList [2 * I + 1]의 경우 유형 (numList [2 * I + 1]) == INT 다른 numList [2 * I + 1]
newList.append (병합 (a, b))
마지막 = [numList [-1]의 경우 유형 (numList [-1]) == INT 다른 numList [-1]
newList.append (마지막)
numList = newList
lenList = LEN (numList)
인쇄 (newList)
인쇄 (lenList)
복귀 numList [0]
#print (mergesort1 (1,2, -1,8,7,6, -2]))
인쇄 (mergesort1 (1,2, -1,8,6,7, -2, -13,58,30, -15,18]))
# [. 1, 2], [-1 ,. 8] [6,7], [-2]
# 4
# [-1, 1, 2, 8], [-2, 6, 7]
# 2
# [-2, -1, 1, 2, 6, 7, 8]
# 1
# [-2, -1, 1, 2, 6, 7, 8]

(직접 정렬 삽입 더한 간격에 따라) 정렬 # 힐
# 기본적인 아이디어 하나 정의. 공정 시퀀스는 t로 [K, .... 1]
K의 회 K 단계에서 # 2 시퀀스 번호 정렬 정렬 큐
대응 단계 TI에있어서, # 3 여행 당 정렬 열이 정렬 될 TI는 각각의 서브 시퀀스로 분할
# 다양한 서브 직접 삽입 정렬.

insertsort DEF (numlist)
렝 = 렌 (numlist)
GAP = 렝
그동안 (GAP> 1이다.)
GAP = GAP 2 //
인쇄 (GAP)
범위 (GAP, 렝)에서 I를 들어
IF numlist [I] <numlist [ GAP-I]
= [I] midnum numlist
J = I - 갭
동안 numList [J]> midnum 및 J> = 0
numList [J + 갭 = numList [J]
J - = 간극
numList [J + 갭 = midnum의
인쇄 (numList)
복귀 numList의
인쇄 (insertsort (1,2, -1,8,6,7, -2, -4]))
[ 1 , 2, -1,8-, 6 , 7, -2, -4]
인터벌 # 4 
# [1, 2 , -1, 8, 6, 7 , -2, -4]
# [1, 2, -1 , 8, 6, 7, -2 , -4]
# [1 2, -2, 8 , 6, 7, -1, -13 ]
# [ 1 , 2, -2 , -6, 6, 7, -1, 8
# 2 구간
# [-2, 2 , 1 , -13 , 6,7, -1, 8
# [ -2 , -4, 1 , 2, 6 , 7, -1, 8
# [-2, -4 , 1, 2 , 6, 7 , -1, 8
# [ -2 , -4, 12, 6 , 7, -1 , 8
# [-2, -13 , -1, 2 , 1, 7 , 6, 8 ]
# [ -2 , -13 , -1, 2, 1, 7, 6, 8]
# 간격은 1
# [ -8 , -2 , -1 , 2, 1, 7, 6, 8]
# [ -8 , -2 , -1 , 2 , 1, 7, 6, 8]
# [ -13 , -2 , -1 , 2 , 1 , 7, 6, 8]
# [ -13 , -2, -1 , 1 , 2 , 7 , 6, 8]
# [ -8 , -2 , -1 , 1 , 2 , 7 , 6 , 8]
# [ -8 , -2 , -1 , 1 , 2 , 6 , 7 , 8 ]
# [-8, -2, -1, 1, 2, 6, 7, 8]

추천

출처www.cnblogs.com/xhw19950606/p/12301081.html