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


    一、插入排序算法(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]

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

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

     

             

  • 相关阅读:
    蛙蛙推荐:简单介绍一下托管容器持久性(CMP),顺便征集一下.NET CMP2.0的改进方案
    15分钟内快速构建数据访问层(翻译)
    【蛙蛙推荐】.NET 2.0里使用强类型数据创建多层应用
    蛙蛙推荐:迎接web2.0:写一个RSS.HTC组件
    蛙蛙推荐:web下的授权简单解决方案
    J2me访问c# Web Services
    2006年3月份技术随笔
    声讨vs.net,讨论用户控件,编码等问题
    Hadoop中mapred包和mapreduce包的区别
    hbase MapReduce程序样例入门
  • 原文地址:https://www.cnblogs.com/jyh317/p/2959435.html
Copyright © 2020-2023  润新知