• 插入排序与归并排序


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

    问题描叙:将一个无序的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), 对于小规模输入,插入排序更高效,对于大规模排序,归并排序更有优势。

  • 相关阅读:
    如何处理请求返回的二进制数据流转化成xlsx文件?
    iview 表单验证不通过问题?
    如何发布一个npm包?
    async 与 await
    数据库事务的四个基本特征以及事务的隔离级别
    遍历Map的四种方式
    HashMap详解
    HashMap和Hashtable的区别
    java中的堆、栈和常量池简介
    Spring IOC(转载)
  • 原文地址:https://www.cnblogs.com/youyuan-wang/p/6403441.html
Copyright © 2020-2023  润新知