冒泡排序算法
(1)算法流程
a.比较两个相邻的元素,如果第一个比第二个大,则交换两个元素的位置;
b.对每一对相邻的元素做同样的工作,从开始的第一对一致到结尾的最后一对,经过这一步,最后的元素将是最大值;
c.针对所有的元素重复以上步骤,除了最后一个;
d.持续对越来越少的元素重复以上步骤,直到没有元素需要交换为止;
(2)算法评价(N代表元素个数)
评价时间复杂度O(N^2),比较稳定的排序方法,对样本的有序性敏感
插入排序算法
(1)算法流程
a.从第一个元素起,该元素可以认为已经有序
b.从下一个元素起依次取出,让取出的元素依次与左边的有序数列进行比较
c.如果左边的元素大于取出的元素,则左边的元素右移
d.如果左边的元素小于等于取出的元素,则将取出的元素插入到左边元素的右边,或者左边不再有元素,则将取出的元素插入到最左边;
e.重复以上过程,直到处理完毕所有的元素为止
(2)算法评价
平均时间复杂度O(N^2),比较稳定的排序方法,对样本的有序性非常敏感,但是插入排序算法的赋值次数比冒泡少,因此一般情况下略优于冒泡排序
选择排序
(1)算法流程
a.从第一个元素起依次取出,并且假定取出的元素为最小值,使用min记录该元素的下标
b.使用min记录的元素和后续的元素依次进行比较,如果后续元素中有比min记录的元素还小的元素,则重新记录该元素的下标到min中,也就是后续记录变成了min记录的最小值
c.直到min记录的最小值和后续所有的元素比较完毕,交换min记录的最小值和最开始假定的元素之间的位置,此时最小值被移动到了最左边
d.重复以上过程,直到处理完毕所有元素
(2)算法评价
平均时间复杂度O(N^2),不稳定,对样本的有序性不敏感,虽然该算法比较的次数多,但是交换的次数少,因此一般情况下也是略优于冒泡排序
例如 30 20 30 50 40,用选择排序会更改两个30的前后顺序,所以不稳定
快速排序算法
(1)算法流程
a.从样本数列中选择中间元素作为基准值,单独保存起来;
b.重组样本数列,将所有小于基准值的元素放在基准值的左边,将所有大于基准值的元素放在基准值的右边,这个过程叫做分组
c.以递归的方式分别对小于基准值的分组和大于基准值的分组进行再次分组,直到处理完毕所有的元素为止
(2)算法评价
平均时间复杂度O(NlogN),不稳定,如果每次都能做到均匀分组,则排序速度最快
选择、冒泡、快速、插入、希尔、归并、堆排等。
1.快排:是冒泡排序的一种改进。
优点:快,数据移动少
缺点:稳定性不足
2.归并:分治法排序,稳定的排序算法,一般用于对总体无序,但局部有序的数列。
优点:效率高O(n),稳定
缺点:比较占用内存