Giter VIP home page Giter VIP logo

sorting-algorithm's Introduction

【程序员面试必备】动画详解十大经典排序算法

由于待排序的元素数量不同,使得排序过程中涉及的存储器不同,可将排序方法分为两类:一类是内部排序,指的是待排序列存放在计算机随机存储器中进行的排序过程;另一类是外部排序,指的是待排序的元素的数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。

我们可以将常见的内部排序算法可以分成两类:

比较类排序:通过比较来决定元素间的相对次序,时间复杂度为 O(nlogn)~O(n²)。属于比较类的有:

排序算法 时间复杂度 最差情况 最好情况 空间复杂度 排序方式 稳定性
冒泡排序 O(n²) O(n²) O(n) O(1)​ In-place
快速排序 O(nlogn)​ O(n²) O(nlogn)​ O(logn)​ In-place
插入排序 O(n²) O(n²) O(n)​ O(1)​ In-place
希尔排序 O(nlog²n)​ O(n²) O(n)​ O(1)​ In-place
选择排序 O(n²) O(n²) O(n²) O(1)​ In-place
堆排序 O(nlogn)​ O(nlogn) O(nlogn)​ O(1)​ In-place
归并排序 O(nlogn)​ O(nlogn) O(nlogn)​ O(n)​ Out-place

非比较类排序:不通过比较来决定元素间的相对次序,其时间复杂度可以突破 O(nlogn),以线性时间运行。属于非比较类的有:

排序算法 时间复杂度 最差情况 最好情况 空间复杂度 排序方式 稳定性
桶排序 O(n+nlog(n/r))​ O(n²) O(n)​ O(n+r)​ Out-place
计数排序 O(n+r)​ O(n+r)​ O(n+r)​ O(n+r)​ Out-place
基数排序 O(d(n+r))​ O(d(n+r)) O(d(n+r)) O(n+r)​ Out-place

名词解释

时间复杂度:描述一个算法执行时间与数据规模的增长关系

空间复杂度:描述一个算法占用空间与数据规模的增长关系

n:待排序列的个数

r:“桶”的个数(上面的三种非比较类排序都是基于“桶”的**实现的)

d:待排序列的最高位数

In-place:原地算法,指的是占用常用内存,不占用额外内存。空间复杂度为 O(1) 的都可以认为是原地算法

Out-place:非原地算法,占用额外内存

稳定性:假设待排序列中两元素相等,排序前后这两个相等元素的相对位置不变,则认为是稳定的。

看完整文章可以直接戳这里

sorting-algorithm's People

Contributors

fiteen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.