• 插入排序与归并排序


    排序是算法的一个基本问题,很多问题都有排序的需要,因此高效的排序方法是大家一致追求的。插入排序与归并排序是两个常见的基本算法。

    问题描叙:将一个无序的n个元素序列按从小到大(从大到小)的顺序输出

    算法:插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并

    插入排序

    # insertion-sort(A)
    
    for j = 2 to A.length
        key = A[j]
        #insert A[j] into the sorted sequence A[1..j-1]
        i = j-1
        while i>0 and A[i] > key
          A[i+1]= A[i]
          i = i-1
        A[i+1] = key

    归并法(分治法)

    # merge(A.p,q,r)
    n1 = q-p+1
    n2 = r-q
    let L[1..n1+1] and R[1..n2+1] be new arrays
    for i = 1 to n1
        L[i] = A[p+i-1]
    for j = 1 to n2
        R[j] = A[q+j]
    L[n1+1] = float('inf')   #positive  infitiny
    R[n2+1] = float('inf')
    i = 1
    j = 1
    for k = p to r
        if L[i]=< R[j]
        A[k] = L[i]
        i = i+1
        else A[k] = R[j]
        j = j+1
    # merge-sort(A,p,r)
    if p<r
        q = (p+r)/2
        merge-sort(A,p,q)
        merfe-sort(A.q+1.r)
        merge(A,p,q,r)

    插入排序算法时间约为c1n^2 , 归并排序的算法时间约为c2*n*lg(n), 对于小规模输入,插入排序更高效,对于大规模排序,归并排序更有优势。

  • 相关阅读:
    luogu1060开心的金明
    luogu1048采药
    uva1025城市里的间谍
    scoi刷题记录(2019/04/07)
    差分及树上差分的正确食用姿势(2019/2/21学习笔记)
    图论技巧(2019/1/28之一)
    考试反思(2019/1/26学习笔记)
    考试反思(2019/1/22)
    「一本通 5.2 例 5」皇宫看守
    「一本通 5.2 例 3」数字转换
  • 原文地址:https://www.cnblogs.com/youyuan-wang/p/6403441.html
Copyright © 2020-2023  润新知