网上关于排序算法的总结太多了,这篇文章就写得不错。
http://m.blog.csdn.net/blog/likaiwalkman/23713373
经典就是经典,个人觉得这些经典的算法被反复研究几十遍都不为过。同时也参考了很经典的书籍《数据结构与算法分析——C语言描述》,温故而知新,每次回头看这些算法的时候都为其中博大精深的思想所折服,呵呵,不扯了。这里只贴出一份用代码敲出来的各个排序算法,纯粹是想练一下手。主要关注快排和堆排序。
交换排序
快速排序
快排的算法思想很精妙,经常在俩指针问题中用到。
假设待排序的元素个数为n,分别存放在数组a[1,…,n]中,令第一个元素为参考元素(称为枢纽元,pivot),pivot=a[1],初始时,i=1,j=n,按照以下方法操作:
(1) 从第j个元素开始向前依次将每个元素与枢纽元pivot比较。如果当前元素大于等于pivot,则比较前一个元素与pivot,即比较a[j-1]与pivot;否则,将当前元素移动到第i个位置,并转到步骤(2)。
(2) 从第i个元素开始向后依次将每个元素与枢纽元pivot比较。如果当前元素小于pivot,则比较后一个元素与pivot,即比较a[i+1]与pivot;否则,将当前元素移动到第j个位置,并转到步骤(3)。
(3) 重复执行(1)和(2),直到出现i>=j,将元素移动到a[i]中。此时,整个元素序列被划分成两个部分,第i个位置之前的元素都小于a[i],第i个位置后的元素都大于等于