算法设计(一)——排序

文章目录

  • 排序
    • 插入排序
    • 堆排序

排序

插入排序

输入: n个数的一个序列
输出: 输入序列的一个排序

输出排序的过程可以用打扑克排时整理有序牌面的方法来类比。每摸到一张牌,就将牌插入到对应顺序的位置。拿在手中的牌总是排好序的。

INSERTION-SORT(A)
for j = 2 to A.length
	key = A[j]
	i = j -1
		while i>0 and A[i]>key
			A[i+1] = A [i]
			i = i+1
		A[i+1] = key

算法设计(一)——排序_第1张图片
插入排序使用了增量方法。

对于小规模输入,插入排序是一种非常快的原址排序算法

即在原来的地址空间调整数值的位置。

原址排序
如果输入数组中仅有常数个元素需要在排序过程中存储在数组之外,则称其为原址排序。
算法设计(一)——排序_第2张图片
顺序统计量
一个n个数的集合的第i个顺序统计量就是集合中第i小的数(从小到大排序)。

堆排序

heapsort : O(nlogn) 原址排序
完全二叉树:除了最底层外,该树是完全充满的,而且是从左到右填充。

堆的数组A的两个属性:

  • A.length为给出数组元素的个数
  • A.heap-size表示有多少个堆元素存储在该数组中。

A[1…A.length]都可能存数据,但只有A[1…A.heap-size]中存放的是堆的有效元素

树的根节点是A[1]. 对于点i

你可能感兴趣的:(算法设计)