一、插入排序算法(Insertion-Sort)
这是一个对少量元素进行排序的有效算法。作用机理好像玩红5,从桌上摸一张牌,并将其插入到左手一把牌中的正确位置。相同点是为了找到这张牌的正确位置,要从左手中已有牌的最右边开始,从右往左依次比较。还有就是拿到的牌,一定要是桌上那副牌最顶上的牌,你要是跳牌,估计会挨骂,嘻嘻。
参数:数组A[1..n],包括n个待排序的数。
数组A中的元素个数n用length[A]
1 for j ← 2 to length[A] 2 do key ← A[j] 3 注释:Insert A[j] into the sorted sequence A[1..j-1] 4 j ← j-1 5 while i>0 and A[i]>key 6 do A[i+1] ← A[i] 7 i ← i-1 8 A[i+1] ← key
A[1..j-1]是左手中已排序好的牌,A[j+1..n]对应桌上的一摞牌。
二、合并排序算法
此算法依照的是分治模式:
分治法(divide-and-conquer)
将原问题划分成n个规模较小而结构域原问题相似的子问题;递归地解决这些子问题,然后再合并其结果,就得到原问题的解。
分治法在每一层的递归上都有三个步骤:
分解:将原问题分解成一系列子问题
解决:递归地解各子问题。
合并:将子问题的结果合并并返回原问题的解。
合并排序的关键步骤在于合并步骤中的合并两个已排序子序列。为做合并,引入一个辅助过程MERGE(A,p,q,r),其中A是数组,p,q,r是下标,满足p≤q<r。该过程假设A[p..q]和A[q+1..r]都已排好序,并将它们合并成一个已排好序的子数组代替当前子数组A[p..r]。
以下是伪代码,其中∞是哨兵,作为每个数组里判断是否为空的标记。
合并算法的例图,意在指示合并算法的处理过程。