对于几种排序方法的学习总结

这段时间学习了算法导论中前八章的几种排序方法,有插入排序、合并排序、堆排序、快速排序、计数排序、基数排序和桶排序,其中插入排序、合并排序、堆排序和快速排序都属于比较排序,即算法的核心是比较数组的两个元素的大小来确定先后关系,基数排序、计数排序和桶排序属于线性时间排序,即时间呈输入规模的线性增长。是否为比较排序关系到排序方法的时间复杂度。以下只是学习过程中的一些总结,如有错误,欢迎釜正~~

原地排序:

原地排序是通过不申请额外的内存空间来进行排序,每次排序都没有或者有常数(1)个的元素存储在数组之外。

1.插入排序,在排序的过程中用一个额外的变量key(也可以不申请)来保存当前需要比较大小的元素,然后交换,满足原地排序的特性;

2.合并排序工作的过程是将原来的数组划分成两个数组,再通过比较这两个数组中最顶端元素的大小来生成排序好的数组,因为对于递归算法,每一层递归产生的子数组都需要申请的额外的内存来保存,排序时也需要申请额外的内存来保存排序好的数组,不属于原地排序。

3.同理堆排序属于原地排序,堆排序的核

 
posted @ 2013-04-14 13:39  FingerDancing  阅读(264)  评论(0编辑  收藏  举报