첫째, 빠른 정렬
나는 정렬 배웠습니다
분할 통치
피벗 포인트
피벗:
빠른 정렬
나쁜 소식 : 원래의 순서로, 피벗 포인트가 필요가없는 ...
전제 조건 : // 피벗 포인트는 아니지만 그 반대의 경우도 마찬가지 이미 그 자리에 있어야합니다
교란 2 3 4 1 ... N
특히 다음 또는 그 반대의 순서화 된 시퀀스의 모든 요소들은 모두 피벗 점이다
빠른 종류의 프로세스의 축 지점에 하나 모든 요소의 하나입니다
질문 : 교환하려면? 얼마나 비용이 높은?
구성 피벗 포인트
후보자 교육 개체로 피벗 포인트를 선택, 첫 번째 요소는 일반적으로 m를 대기
구성이 프로세스에서 사용 하이 LO 시퀀스는 세 부분 L, U, G로 분할
L은 후보 축점을 초과하지 않음 소자의 접두어, 접미어 G, 피봇 점 후보 이상인 모든 요소
U는 알려지지 않은 크기로 구성 요소 사이의 두 시퀀스 인
전체 시퀀스의 초기 상태는 U, L 및 G가 비어있다
그들은 서로 가까이되도록 시작 후 보라에 하이 시도를 교대는, 측정 및 이동
모든 단계와 LO는 L 부는 안녕, 확장 및 G는이 과정에서, U는 L 또는 G의 엘리먼트에 추가되고
마지막으로, 안녕 보라가 같은 위치를 참조는, 피벗 포인트는 이전에 선택한 후보가, 거기 실제 피벗 포인트를 배치
단 조성 +의 불변성
초기 상태, L 및 G가 비어, L 이하의 G와 동일한 피벗 NATURAL 만족
U 헤더 요소는 축 점 후보가 백업으로,이 유휴 고려 될 수있다 제거 된
일반 상황 :
LO는 좌측 확장 시퀀스가 G만큼 [하이] 축 후보 점 이상인 원소 _elem 끝으로,이 강재 1 개 단위 감소한다 유휴 가정
따라서 G에 포함 된 원래의 요소, 마지막의 새로운 요소가 여전히 더 이상 어떤 시점에서 요소가 끝날 때까지 G에 속하는 계속 이러한 조건을 충족하는 조건을 충족
안녕 보라 요소 기기가 유휴 상태의 끝에 전송, 안녕하세요 유휴 상태
또한 조사 _elem [소호 같이, L 확장 피벗 점 후보까지 첫 번째 요소는 LO의 값은 초과하지
보라 안녕로 전송됩니다
예
제 1 축 부재 (6)가 배양 될 수있는 후보 지점으로 간주하고, 그 백업 제거 장치가 논리적으로 대기로 간주
이때, 즉 제 소자 (7)의 단부를 조사 샤프트는 G로 분류 후보 점 (6)보다 큰
새로운 단부 소자 (6)는, 공회전이 목적 LO (1)에 전사하고, 1 미만의 L 시퀀스에 분류, 즉, 첫 번째 요소의 위치
오른쪽 세 미만 6 확장하고 확장, 8, 6보다 큰
위치로 전송하는 하이 보라 유휴
왼쪽 5, 6보다 작은 LO로 진행 하이 유휴
6이 우측보다 작고, 오른쪽은 5 미만이다 6
6보다 큰 9 오른쪽 보라 유휴, 인사 이동입니다
4 미만 6 왼쪽이다, 보라 이동
右侧的U只剩下一个元素,此处应放6,是轴点
性能分析
平均性能
a4 快速排序:变种
不变性:
L和G在U左边
单调性
实现
实例
b1 选取:众数
选取与中位数
众数
必要条件
减而治之
算法
b3 选取:通用算法
尝试:蛮力
尝试:堆(A)
尝试:堆(B)
尝试:堆(C)
H:任取k个元素,组织为大顶堆 // O(k)
G:其余n-k个元素,组织为小顶堆 // O(n-k)
反复地:比较h和g // O(1)
如有必要,交换之 // O(2*(logk+log(n-k)))
直到:h<=g // O(min(k, n-k))
quickSelect()
linearSelect()
复杂度
希尔排序
Shellsort
实例
call-by-rank
Insertionsort
Shell's Sequence
---恢复内容结束---