一.直接插入排序
相当于把大的元素挪到后面去
优化:折半插入排序
如果是对链表进行直接插入排序,虽然移动元素的次数变少了,但是最坏情况的比较次数仍为n的平方,所以时间复杂度仍为n的平方
二.希尔排序
时间复杂度最坏为n的平方,某个情况为n的1.3次方,但优于直接插入排序。不能对链表使用且不稳定
三.交换排序(冒泡和快速)
冒泡排序:
时间复杂度最坏为n的平方(逆序),最好情况为n(顺序),所以平均为n的平方
快速排序:
但数组为顺序或者逆序时,由于枢纽每次都会变成最靠边的元素,会把数组划分成很不均匀的两份,所以时间复杂度很高。但当枢纽可以把数组划分成两个比较均匀的部分时时间复杂度会比较低。
优化思路:(1)选头中尾三个元素,然后选中间的作为枢纽 (2)随机选一个作为枢纽
平均时间复杂度:nlog2n
不稳定
一次划分不等于一次排序,一次排序是对所有未确定位置元素的一次处理,而一次划分只是对一个枢纽元素的处理,所以一次排序可能可以确定多个元素的位置。
四.选择排序(简单选择排序和堆排序)
简单选择排序:
时间复杂度为n的平方,不稳定,顺序表链表皆可
堆排序:
堆的删除与插入
五.归并排序
六.基数排序
稳定排序
七.外部排序
败者树:
置换归并:
归并树的重要性质:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。