11k words 10 mins.

是这样的,我们在刚学数据结构时候,都会学什么八大排序算法乱七八糟的,但是真正在写 Java 项目时,都是直接化身 API 调用工程师, Arrays.sort() 完事,无意间点开,其实里面的玄机另有洞天。

2.1k words 2 mins.

# 归并排序(稳定)

归并排序是建立在归并操作上的一种有效的排序算法,1945 年由约翰・冯・诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。

847 words 1 mins.

# 冒泡排序(稳定)

# 1、基本思想

冒泡排序( Bubble Sort )是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢 “浮” 到数列的顶端。

1.7k words 2 mins.

# 堆排序(不稳定)

个人感觉堆排序还是挺难的,虽然会有演示动画
链接

但是从代码层面就没有那么好的通俗

660 words 1 mins.

# 选择排序(不稳定)ON2 从算法逻辑上看,选择排序是一种简单直观的排序算法,在简单选择排序过程中,所需移动记录的次数比较少。 # 1、基本思想 选择排序的基本思想:比较 + 交换。 在未排序序列中找到最小(大)元素,存放到未排序序列的起始位置。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。 # 2、算法描述 ①. 从待排序序列中,找到关键字最小的元素; ②. 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换; ③. 从余下的 N - 1 个元素中,找出关键字最小的元素,重复①、②步,直到排序结束。 #...
1.2k words 1 mins.

# 插入排序(稳定)

一般来说,插入排序都采用 in-place 在数组上实现。具体算法描述如下:

①. 从第一个元素开始,该元素可以认为已经被排序
②. 取出下一个元素,在已经排序的元素序列中从后向前扫描
③. 如果该元素(已排序)大于新元素,将该元素移到下一位置
④. 重复步骤 3,直到找到已排序的元素小于或者等于新元素的位置
⑤. 将新元素插入到该位置后
⑥. 重复步骤②~⑤

4.3k words 4 mins.

# 快排 (不稳定)

快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据要小,再按这种方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,使整个数据变成有序序列。

# 快速排序的原理