插入类排序:
直接排序,折半插入排序,希尔增量排序;
交换类排序:
冒泡排序,快速排序(分治思想);
选择类排序:
简单选择排序,堆排序(建堆是关键,还必须插入和调整);
归并排序:
二路归并排序,多路归并排序(多路归并排序多用在外部排序上);
基数类排序:
桶排序(桶排序的分到这里可能不太准确);
外部排序(多路归并排序和败者树,伴随有I/O过程,比较复杂)。
内部排序和外部排序的分类依据:排序是否在内存中。一般的排序算法都是基于比较的,而基数排序时例外。
排序的时间复杂度一般有比较和移动的次数有关。
n个关键字的序列,至少得经过log(n!)比较:
比如有n个元素,每次比较的话有两种可能,假设共计得比较t次,则有2^t种可能性,而n个元素的比较树是n!种,2^t=n!,得t=log(n!)。
盗图http://gengning938.blog.163.com/blog/static/128225381201141121326346/: