zoukankan      html  css  js  c++  java
  • 算法基础 (插入排序、合并排序算法)

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

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

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

     

             

  • 相关阅读:
    arm-linux-3.4.2移植for2440
    编译内核是出现:arch/arm/mm/tlb-v4wbi.S:64:error: too many positional arguments
    poj3050 Hopscotch
    poj3187 Backward Digit Sums
    poj2718 Smallest Difference
    hihocoder offer收割编程练习赛10 C 区间价值
    poj1862 Stripies
    poj3262 Protecting the Flowers
    poj2229 Sumsets
    poj2385 Apple Catching
  • 原文地址:https://www.cnblogs.com/jyh317/p/2959435.html
Copyright © 2011-2022 走看看