힐 정렬의 기본 아이디어:
힐 정렬은 삽입 정렬을 기반으로 한 개선입니다. 삽입 정렬은 배열된 배열에서 작동할 때 효율적이므로 삽입 정렬은 일반적으로 비효율적입니다. 한번에 이동할 수 있습니다. 따라서 Hill 정렬은 그룹화 증분이 1이 될 때까지 먼저 그룹화하여 정렬합니다.
예:
arr = [49,38,04,97,76,13,27,49,55,65], 그룹화 증분이 5인 경우 빨간색 숫자는 1입니다. group , 삽입 정렬을 수행하고
을 차례로 반복하여 arr = [13,38,04,97,76,49,27,49,55,65] 순회가 완료된 후 그룹화 증분. 감소,
arr = [13,27,04,55,65,49,38,49,97,76], 그런 다음 그룹화 증분 2로 그룹에 대해 삽입 정렬을 계속 수행합니다. 그룹화 증분은 1
코드:
Python 코드
def shell_sort(lists): #希尔排序 count = len(lists) step = 2 group = count / step while group > 0: #通过group增量分组循环 for i in range(0, group): j = i + group while j < count: #分组中key值的索引,通过增量自增 k = j - group key = lists[j] while k >= 0: #分组中进行插入排序 if lists[k] > key: lists[k + group], lists[k] = lists[k], key else: break k -= group j += group group /= step return lists