1.什么是排序算法?
在梳理十大排序算法之前,虽然知道排序算法是将数字或字母按增序排列的算法,但该理解过于片面,那排序算法的权威定义是什么呢。
一个排序算法(英语:Sorting algorithm)是一种能将一串资料依照特定排序方式排列的算法。最常用到的排序方式是数值顺序以及字典顺序。基本上,排序算法的输出必须遵守下列两个原则:
- 输出结果为递增序列(递增是针对所需的排序顺序而言)
- 输出结果是原输入的一种排列、或是重组
2. 如果评判一个算法?
1.时间复杂度
执行算法需要消耗的时间。一般来说,看算法实现中的for循环
的个数,比如说冒泡排序的算法实现中有两个for
,那么它的时间复杂度是n^2
(n代表目标集合的大小)。但时间复杂度有三种细分情况,通常是最差、平均和最好性能。
2.空间复杂度
执行算法时所消耗的空间大小。在执行算法时,需要看有没有引入额外的内存空间,比如说对一个集合进行排序,没有引入额外的空间,那么时间复杂度就是O(n)
,如果创建一个大小和目标集合相同的集合,那么空间复杂度就是O(n^2)
。
3.稳定性
为啥算法还有稳定性,这种听起来不太好理解。我理解是算法排序后,各元素的相对位置的唯一性有没有变化,如果执行了多次该算法,各元素的相对位置都是固定且唯一的,那么就说这个算法是稳定的,否则称之为不稳定。
3.十大排序算法
1.算法之间的不同在于适用场景不同,各有千秋。
- 冒泡排序(bubble sort)
- 选择排序(selection sort)
- 插入排序(insertion sort)
- 快速排序(quick sort)
- 归并排序(merge sort)
- 希尔排序(shell sort)
- 堆排序(heap sort)
- 计数排序(counting sort)
- 桶排序(bucket sort)
- 基数排序(radix sort)
2.简要比较
4.算法动态可视化学习资料
- https://visualgo.net/zh