排序算法总结:十大经典算法1
算法概述
1、排序分类
比较类排序:通过比较来决定元素间的相对次序,由于时间复杂度不能突破O(nlogn),因此也称非线性时间比较类排序
非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也成为线性时间非比较类排序。

2、算法复杂度

3、相关概念:
稳定:排序后,每个元素的位置是固定的,相同数字的位置不会有更改。
不稳定:相同数字的位置可能会发生变化,
时间复杂度:对排序数据的总的操作次数。反应当n变化时,操作次数呈现什么规律。
空间复杂度:是指算法在计算机内执行时所需要储存空间的度量,它也是数量规模n的函数。
1、冒泡排序
冒泡排序是一种简单的排序算法。它重复的走访要排序的数列,一个比较两个元素,如果它们顺序错误,就把他们交换过来。
这样的走访要重复到没有错误的顺序为止,也就是排序完成。
这个算法的名字由来是 因为越小的元素会经由交换慢慢 浮到数列顶端。
1.1算法实现描述
比较相邻的元素,如果第一个比第二个大,就交换它们两个
对每一对相邻元素做同样的工作,从开始第一对到结尾最后一对,这样在最后的元素应该就是最大的数;
针对所有元素重复以上步骤,除了最后一个
重复步骤1~3,知道排序完成
1.2动图演示

1.3代码实现
2、选择排序
是一种简单直观的排序算法。
2.1工作原理:
首先在未排序序列中找到最小(大)元素,存放在排序序列的起始位置,然后,在从剩余的未排序的序列中寻找最小(大)元素,然后放到已排序的末尾。以此类推,直到元素均排序完成。
2.1算法描述:
n个记录的直接选择选择排序可经过n-1趟直接选择排序得到有序排序结果。具体算法描述如下:
初始状态:无序区:q【1....n】,有序区:空
第i趟排序(i=1,2,3....n-1)开始时,当前有序区和无序区分别为q【1..i-1】和q(i...n)。该趟排序从无序中选出最小的q【k】,将它与无序区第一个记录R交换,
使q【1...i】和去【i+1,n】变为记录个数加一个新有序区,和记录个数减少一个的新无序区。
2.3动态演示:

2.4代码实现:
ts实现代码:
2.5算法分析:
变现最稳定的算法之一,用到这个算法的时候,数据越小越好。
3、插入排序
3.1工作原理:
一种简单直观的算法,通过构建有序序列,对于未排序的序列数据,在已排序序列中从后向前扫描,找到相应的位置并插入。
3.2算法描述:
一般来说,插入排序都采用in-place在数组上实现,。具体面熟如下:
- 从第一个元素开始,该元素可以认为已经排序;
- 取出下一个元素,在已经排序的元素中从后往前扫描;
- 如果该元素大于新元素,将该元素移到下一个位置;
- 重复步骤3,知道找到已排序的元素小于或者等于新元素的位置;
- 将新元素插入到该位置;
- 重复2~5步骤;
3.3动图演示

3.4代码实现:

浙公网安备 33010602011771号