美文网首页
数据结构与算法--排序-O(nlogn)

数据结构与算法--排序-O(nlogn)

作者: zhujunhua | 来源:发表于2020-12-08 13:59 被阅读0次

总结: 归并排序, 快速排序 时间复杂度 O(nlogn).

冒泡排序、插入排序、选择排序这三种排序算法,它们的时间复杂度都是 O(n2),比较高,适合小规模数据的排序。今天,我讲两种时间复杂度为 O(nlogn) 的排序算法,归并排序和快速排序。这两种排序算法适合大规模的数据排序,比上一节讲的那三种排序算法要更常用。
归并排序和快速排序都用到了分治思想,非常巧妙。我们可以借鉴这个思想,来解决非排序的问题,比如:如何在 O(n) 的时间复杂度内查找一个无序数组中的第 K 大元素? 这就要用到我们今天要讲的内容。

1. 归并排序

// 归并排序算法, A是数组,n表示数组大小
merge_sort(A, n) {
        merge_sort_c(A, 0, n-1)
}

// 递归调用函数
merge_sort_c(A, p, r) {
        // 递归终止条件 
        if p >= r then return 

        // 取p到r之间的中间位置q 
        q = (p+r) / 2  // p+q溢出,改为 p + (q-p)/2
        // 分治递归 
        merge_sort_c(A, p, q) 
        merge_sort_c(A, q+1, r) 
        // 将A[p...q]和A[q+1...r]合并为A[p...r] 
        merge(A[p...r], A[p...q], A[q+1...r])
}

归并排序的执行效率与要排序的原始数组的有序程度无关,所以其时间复杂度是非常稳定的,不管是最好情况、最坏情况,还是平均情况,时间复杂度都是 O(nlogn)
归并排序的时间复杂度任何情况下都是 O(nlogn),看起来非常优秀。但是,归并排序并没有像快排那样,应用广泛,这是为什么呢?因为它有一个致命的“弱点”,那就是归并排序不是原地排序算法。这是因为归并排序的合并函数,在合并两个有序数组为一个有序数组时,需要借助额外的存储空间。
在任意时刻,CPU 只会有一个函数在执行,也就只会有一个临时的内存空间在使用。临时内存空间最大也不会超过 n 个数据的大小,所以空间复杂度是 O(n)

2. 快速排序

分区过程.png

内容总结自:
极客时间:《数据结构与算法》王争, 12 | 排序(下):如何用快排思想在O(n)内查找第K大元素?

相关文章

  • 算法之我见(II)

    5.数据结构和算法的关系 1.常见数据结构 线性结构:对应数组,下标访问O(1),排序最快O(nlogn),也有O...

  • 2020-11-19 排序算法一(冒泡和快排多种实现)

    主流的排序算法 时间复杂度为O(n^2):冒泡排序选择排序插入排序希尔排序(介于O(n^2)与O(nlogn)之间...

  • 高级排序算法(一)

    O(nlogn)的排序算法 我们先来看看nlogn比n2快多少? 归并排序(Merge Sort) 算法思想:假定...

  • 数据结构与算法--排序-O(nlogn)

    总结: 归并排序, 快速排序 时间复杂度 O(nlogn). 冒泡排序、插入排序、选择排序这三种排序算法,它们的时...

  • 算法笔记:快排算法与归并排序

    快排算法与归并算法时间复杂度都是O(nlogn)的排序算法。适合大规模的数据排序。思想利用的是分治思想。 归并排序...

  • 6. 归并排序

    归并排序:算法时间复杂度O(nlogn) 空间复杂度O(n) 算法实现

  • 排序

    本文讲数组的排序,排序复杂度分为O(n²)和O(nlogn)。其中:O(n²)的算法有:插入排序[https://...

  • 基于比较的排序

    一、排序算法定义 本章介绍是基于比较的排序算法,这类排序算法的理论最优时间复杂度是O(NlogN)。 各类排序算法...

  • 合并排序和快速排序

    归属:分治法 算法复杂度: 合并排序:θ(nlogn)快速排序:一般是O(nlogn) 稳定性:合并排序稳定,快速...

  • 数组里最小的k个元素&&快排

    这个题目之前在看数据结构和算法分析的时候见过,其实解法也挺多的。 排序后找出前k个元素快排O(NlogN),然后O...

网友评论

      本文标题:数据结构与算法--排序-O(nlogn)

      本文链接:https://www.haomeiwen.com/subject/lzwfgktx.html