几种排序算法

来源:互联网 发布:mac如何还原网络设置 编辑:程序博客网 时间:2024/05/01 10:20

最近一直在复习算法,在经历了四次面试之后,还没有找到适合自己的工作;

暂时歇一歇,准备冬天去北京创业一条街吹泡泡去。


在面试过程中主要提及的就是对于排序算法的疑问;

主要针对以下几种排序算法:

1,冒泡排序;

2,插入排序;

3,选择排序;

4,希尔排序;

5,归并排序;

6,快速排序;

7,堆排序


对于基数排序或者计数排序,基本上没有什么讨论,基本上讲述一下概念就可以了。

针对我经历的面试而言,大概有几种提问的方法:

1,比较一下或讲述一下几种排序的概念,比较一下时间复杂度和空间复杂度;

2,就是比较难一点的面试,就是让你讲述一下堆排序,或把堆的创建过程和堆排序的执行过程详细描述出来,或者直接手写一下堆排序;一位面试官和我讨论过,对于排序这方面,比较看重的就是堆排序,毕竟别的排序方法并没有太多太难可以体现出差距的东西。


堆排序是空间复杂度O(1)时间复杂度为O(nlogn)的一种排序算法,之所以空间复杂度可以为O(1),是因为在用数组实现的时候可以通过根节点和左右子节点的标号之间的数学关系进行直接的访问操作。避免了节省了存储。而快速排序需要记录分割点的位置坐标,空间复杂度为O(nlogn);


我手写的堆排序程序分为三个部分:

1,驱动程序;

2,构造最大堆;

3,调整完全二叉树的上浮程序;


在我的堆排序算法中,直接将堆顶元素与堆尾元素互换,在一个数组中完成堆排序;


代码稍后贴。


0 0