算法基础 (插入排序、合并排序算法)

一、插入排序算法(Insertion-Sort

         这是一个对少量元素进行排序的有效算法。作用机理好像玩红5,从桌上摸一张牌,并将其插入到左手一把牌中的正确位置。相同点是为了找到这张牌的正确位置,要从左手中已有牌的最右边开始,从右往左依次比较。还有就是拿到的牌,一定要是桌上那副牌最顶上的牌,你要是跳牌,估计会挨骂,嘻嘻。

         参数:数组A[1..n],包括n个待排序的数。

          数组A中的元素个数nlength[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是下标,满足pq<r。该过程假设A[p..q]A[q+1..r]都已排好序,并将它们合并成一个已排好序的子数组代替当前子数组A[p..r]

       以下是伪代码,其中∞是哨兵,作为每个数组里判断是否为空的标记。

 

 合并算法的例图,意在指示合并算法的处理过程。

 

 

 

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值