算法导论第五天学习笔记

堆排序(续)

堆排序算法

HEAPSORT(A):
	BUILD-MAX-HEAP(A)
	for i = A.length downto 2
		exchange A[1] with A[i]
		A.heap-size = A.heap-size - 1
		MAX-HEAPIFY(A, 1)

优先队列

优先队列 是一种用来维护由一组元素构成的集合S的数据结构,其中的每一个元素都有一个相关的值,称为关键字

HEAP-EXTRACT-MAX(A):
	if A.heap-size < 1
		error "heap underflow"
	max = A[1]
	A[1] = A[A.heap-size]
	A.heap-size =  A.heap-size -1
	MAX-HEAPIFY(A, 1)
	return max
HEAP-INCREASE-KEY(A, i, key):
	if key < A[i]
		error "new key is smaller than current key"
	A[i] = key
	while i > 1 and A[PARENT(i)] < A[i]
		exchange A[i] with A[PARENT(i)]
		i = PARENT(i)

快速排序

快速排序的描述

QUICKSORT(A, p, r):
	if p < r 
		q = PARTITION(A, p, r)
		QUICKSORT(A, p, q -1)
		QUICKSORT(A, q + 1, r)

PARITION(A, p, r):
	x = A[r]
	i = p-1
	for j = p to r - 1
		if A[j] <= x
			i = i + 1
			exchange A[i] with A[j]
	exchange A[i + 1] with A[r]
	return i + 1

快速排序的性能

最坏情况:O(n²)
平均:O(nlgn)

快速排序的随机化版本

主要是通过随机函数随机选取主元进行划分的元素

RANDOMIZED-PARTITION(A, p, r):
	i = RANDOM(p, r)
	exchange A[r] with A[i]
	return PARTITION(A, p, r)
RANDOMIZED-QUICKSORT(A, p, r):
	if p < r
		q = RANDOMIZED-PARTITION(A, p, r)
		RANDOMIZED-QUICKSORT(A, p, q - 1)
		RANDOMIZED-QUICKSORT(A, q - 1, r)

快速排序分析

略。。。


线性时间排序


排序算法的下界

1、在最坏情况下,任何比较排序算法都需要做Ω(nlgn)次比较。
2、堆排序和归并排序都是渐进最优的比较排序

计数排序

COUNTING-SORT(A, B, k):
	let C[0..k] be a new array
	for i = 0 to k
		C[i] =0
	for j = 1 to A.length
		C[A[j]] = C[A[j] + 1
	for i = 1 to k
		C[i] = C[i] + C[i -1]
	for j = A.length downto 1
		B[C[A[j]]] = A[j]
		C[A[j]] = C[A[j]] - 1

计数排序是稳定的

基数排序

RADIX-SORT(A, d):
	for i = 1 to d
		use a stable sort to sort array A on digit i

1、给定n个d位数,其中每一个数位有k个可能的取值。如果RADIX-SORT使用的稳定排序方法耗时Θ(n+k),那么它就可以在Θ(d(n+k))时间内将这些数排好序。
2、给定一个b位数和任何正整数人r <= b,如果RADIX-SORT使用的稳定排序算法对数据取值区间是0到k的输入进行排序耗时Θ(n+k),那么它就可以在Θ((b / r)(n + 2 r 2^{r} 2r))时间内将这些数据排好序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值