' 을 (를) 클릭합니다
정렬을 삽입하는 기본 작업은 정렬된 데이터에 데이터를 삽입하여 번호에 1 을 더한 새로운 정렬된 데이터를 얻는 것입니다. 이 알고리즘은 시간 복잡도가 O (n 2) 인 소량의 데이터를 정렬하는 데 적합합니다. 안정적인 정렬 방법입니다.
삽입 알고리즘은 정렬할 배열을 두 부분으로 나눕니다.
첫 번째 부분에는 마지막 요소를 제외한 이 배열의 모든 요소가 포함되어 있습니다 (배열에 삽입할 공간이 하나 더 많음)
두 번째 부분에는 이 요소, 즉 삽입할 요소만 포함되어 있습니다.
첫 번째 부분 정렬 후 마지막 요소를 정렬된 첫 번째 부분에 삽입합니다.
' 을 (를) 클릭합니다
Def insert_sort (목록):
# 정렬 삽입
Count = len (목록)
범위 내 I( 1, 개수):
키 = 리스트 [i]
J = I-1
J>= 0:
If 목록 [j] > 핵심 사항:
리스트 [j+1] = 리스트 [j]
리스트 [j] = 키
J -= 1
목록으로 돌아가기
' 을 (를) 클릭합니다
셸 정렬은 삽입 정렬의 한 유형입니다. 내림차순 증분 정렬이라고도 하며 직접 삽입 정렬 알고리즘의 보다 효율적이고 향상된 버전입니다. 힐 정렬은 불안정한 정렬 알고리즘입니다. 이 방법은 dl 에 의해 제안 된 후 명명됩니다. 쉘은 1959 에 있습니다.
Hill 정렬은 대상 증분에 따라 레코드를 그룹화하고 직접 삽입 정렬 알고리즘을 사용하여 각 그룹을 정렬하는 것입니다. 증분이 감소함에 따라 각 그룹에 포함된 키워드가 점점 더 많아지고 있습니다. 증분이 1 으로 줄어들면 전체 파일이 정확히 그룹화되고 알고리즘이 종료됩니다.
' 을 (를) 클릭합니다
Def shell_sort (목록):
# 힐 정렬
Count = len (목록)
단계 = 2
그룹 = 개수/단계
While group & gt0:
범위 내 I(0, 그룹) 의 경우:
J = I+그룹
J< 개수:
K = j-그룹
키 = 리스트 [j]
K>= 0:
If 목록 [k] > 핵심 사항:
리스트 [k+그룹] = 리스트 [k]
목록 [k] = 키
K -= 그룹
J += 그룹
그룹/= 단계
목록으로 돌아가기
' 을 (를) 클릭합니다
버블 정렬은 정렬할 시퀀스에 반복적으로 액세스하여 한 번에 두 요소를 비교하고 순서가 틀리면 교환합니다. 시리즈에 액세스하는 작업은 교환이 필요하지 않을 때까지 반복됩니다. 즉 시리즈가 이미 정렬되어 있습니다.
' 을 (를) 클릭합니다
버블 _ 정렬 (목록) 정의:
# 버블 정렬
Count = len (목록)
범위 내 I(0, 개수) 의 경우:
범위 내 j(I+ 1, 개수) 의 경우:
If 목록 [I] > 목록 [j]:
Temp = lists[j]
리스트 [j] = 리스트 [i]
목록 [i] = 임시
목록으로 돌아가기
' 을 (를) 클릭합니다
빠른 정렬
한 번의 정렬로 정렬할 데이터를 두 개의 개별 부분으로 나눕니다. 그 중 한 부분의 모든 데이터가 다른 부분보다 작습니다. 그런 다음 이런 방식으로 두 부분의 데이터를 빠르게 정렬하면 전체 정렬 프로세스가 재귀적으로 진행되어 전체 데이터를 하나의 정렬된 시퀀스로 만들 수 있습니다.
' 을 (를) 클릭합니다
Def quick_sort (목록, 왼쪽, 오른쪽):
# 빠른 정렬
& gt= 오른쪽을 떠나는 경우:
목록으로 돌아가기
키 = 리스트 [왼쪽]
낮음 = 왼쪽
높음 = 오른쪽
동시에< 오른쪽 떠나기:
& lt 권한과 목록 [권한] > = 키:
오른쪽 -= 1
리스트 [왼쪽] = 리스트 [오른쪽]
& lt 오른쪽과 목록 [왼쪽] < = 키:
왼쪽+=1
리스트 [오른쪽] = 리스트 [왼쪽]
리스트 [오른쪽] = 키
Quick_sort (목록, 낮음, 왼쪽-1)
Quick_sort (목록, 왼쪽+1, 높음)
목록으로 돌아가기
' 을 (를) 클릭합니다
정렬을 직접 선택합니다
1 을 전달하고 정렬할 레코드에서 가장 작은 레코드를 선택하여 r[ 1] 과 교환합니다.
두 번째로 정렬할 레코드 r[2] ~ r[n] 중에서 가장 작은 레코드를 선택하여 r[2] 과 교환합니다.
이와 같은 방식으로 I 번 정렬할 레코드 r[i] ~ r[n] 에서 가장 작은 레코드를 선택하고 r[i] 와 교환하여 모든 레코드가 정렬될 때까지 순서가 계속 증가합니다.
' 을 (를) 클릭합니다
Select_sort (목록) 를 정의합니다.
# 정렬 선택
Count = len (목록)
범위 내 I(0, 개수) 의 경우:
최소값 = I
범위 내 j(I+ 1, 개수) 의 경우:
If 목록 [min] > 목록 [j]:
최소값 = j
Temp = 목록 [분]
리스트 [min] = 리스트 [i]
목록 [i] = 임시
목록으로 돌아가기
' 을 (를) 클릭합니다
Heapsort 는 힙 트리 (heap) 의 데이터 구조를 사용하여 설계된 정렬 알고리즘으로 선택적 정렬입니다.
배열의 특징을 사용하여 지정된 인덱스의 요소를 빠르게 찾을 수 있습니다. 더미는 큰 뿌리 더미와 작은 뿌리 더미로 나뉘어 완전한 이진 트리이다. 루트 힙의 요구 사항은 각 노드의 값이 상위 노드의 값보다 크지 않다는 것입니다. 즉, a [parent [I] >; = A[i].
내림차순이 아닌 배열에서는 루트 힙이 필요합니다. 루트 힙의 요구 사항에 따라 최대값이 힙의 맨 위에 있어야 하기 때문입니다.
' 을 (를) 클릭합니다
# 힙 조정
Def adjust_heap (목록, I, 크기):
Lchild = 2 * I+1
Rchild = 2 * I+2
최대값 = I
내< 크기/2 인 경우:
Lchild & lt 크기 및 목록 [lchild] > 목록 [최대]:
Max = lchild
Rchild & lt 크기 및 목록 [rchild] > 인 경우 목록 [최대]:
Max = rchild
만약 맥스! = 나:
리스트 [최대값], 리스트 [i] = 리스트 [i], 리스트 [최대값]
Adjust_heap (목록, 최대값, 크기)
# 힙 생성
Def build_heap (목록, 크기):
범위 내 I(0, (크기 /2))[::- 1]:
Adjust_heap (목록, I, 크기)
# 힙 정렬
힙 정렬 (목록) 정의:
Size = len (리스트)
Build_heap (목록, 크기)
범위 (0, 크기) [:-1] 의 I:
목록 [0], 목록 [i] = 목록 [i], 목록 [0]
Adjust_heap(lists, 0, I)
' 을 (를) 클릭합니다
병합 정렬은 병합 작업에 기반한 효과적인 정렬 알고리즘으로, 분할 및 통치의 매우 일반적인 응용 프로그램입니다. 순서가 지정된 하위 시퀀스를 병합하여 완전히 순서가 지정된 시퀀스를 얻습니다. 즉, 각 하위 시퀀스가 먼저 정렬된 다음 하위 시퀀스 세그먼트가 정렬됩니다. 두 개의 정렬된 테이블이 하나의 정렬된 테이블로 결합되면 양방향 병합이라고 합니다.
통합 프로세스는 다음과 같습니다.
A[i] 와 a[j] 의 크기를 비교합니다. A[i] 가 a [j] 보다 작거나 같으면 첫 번째 순서 테이블의 요소 A [I] 를 r[k] 로 복사하고 I 와 k 는 각각1을 추가합니다.
그렇지 않으면 두 번째 정렬된 테이블의 요소 a[j] 를 r[k] 로 복사하고, j 와 k 를 각각 1 등으로 추가하여 한 정렬 테이블이 다 소진된 다음 다른 정렬 테이블의 나머지 요소를 r 의 아래 첨자 k 에서 아래 첨자 t 로 복사한 다음 정렬을 병합합니다 먼저 정렬할 구획 [s, t] 을 중간점으로 두 개로 나누고 왼쪽 하위 구획을 정렬한 다음 오른쪽 하위 구획을 정렬하고 마지막으로 한 번의 병합 작업을 통해 왼쪽 및 오른쪽 구획을 하나의 정렬된 간격 [s, t] 으로 결합합니다.
' 을 (를) 클릭합니다
병합 정의 (왼쪽, 오른쪽):
I, j = 0,0
결과 = []
그리고 나 & ltlen (왼쪽) 과 j< len (오른쪽):
[I] < 를 떠나면 = right[j]:
Result.append(left[i] I])
I += 1
그렇지 않은 경우:
Result.append (오른쪽 [j])
J += 1
Result += left[i:]
Result += right[j:]
결과를 반송하다
병합 정렬 (리스트) 정의:
# 병합 정렬
If len (목록)<= 1:
목록으로 돌아가기
Num = len (목록)/2
Left = merge_sort (목록 [:수량])
Right = merge_sort(lists[num:])
병합 반환 (왼쪽, 오른쪽)
' 을 (를) 클릭합니다
기수 정렬은 "분산 정렬" 에 속하며 "배럴 정렬" 또는 bin 정렬이라고도 합니다. 이름에서 알 수 있듯이 키 값의 일부 정보를 통해 정렬할 요소를 일부 "통" 에 배포하여 정렬 기능을 구현합니다. 기수 정렬은 안정된 정렬에 속한다.
시간의 복잡성은 O (nlog(r)m) 입니다. 여기서 R 은 채택된 기수이고 M 은 힙입니다. 경우에 따라 기수 정렬 방법은 다른 안정적인 정렬 방법보다 효율적입니다.
' 을 (를) 클릭합니다
수학을 도입하다
Def radix_sort (목록, radix= 10):
K = int (math.ceil (math.log (max (lists), radix)))
Bucket = [[] for I in range(radix)])]
범위 내 I 의 경우 (1,k+ 1):
목록에 있는 j 의 경우:
Bucket [j/(radix * * (I-1)% (radix * * I)]. 추가 (j)
목록 삭제 [:]
삽에서 z 의 경우:
목록 += z
Del z[:]
목록으로 돌아가기
--
CRazyDOgen 에 의해
데이터 소스: CSDN
원문: /jipang 6225/ 문장/상세 정보 /799753 12
저작권 성명: 이 글은 블로거 오리지널 문장, 블로그 링크를 동봉해 주세요!