【PHP编程】PHP程序员最应该掌握的几种排序算法

近日,今日头条和快手事件将“算法”拉进了大众的视野,一时间“算法是否存在价值观”的问题,成了各大媒体关注的焦点。作为程序员,抛开“算法是否存在价值观”的争论,我们可以从中看到“算法”的巨大力量。算法,虽然简简单单两个字,但就从技术层面而言,它却不是一个简单的问题。算法涉及很多内容,需要多个学科,如数学、社会心理学等的配合。

下面我们以PHP程序员最应该掌握的几种排序算法为例,看看算法的具体实现。

1、冒泡排序法

描述:

在冒泡排序中,每一个要排序的数字都是一个泡,然后每个泡与泡之间进行比较,然后把最大的泡放在最右侧,直到排序结束,我们把这种排序就称之为“冒泡排序”。

实现:

【PHP编程】PHP程序员最应该掌握的几种排序算法

2、选择排序

描述:

在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。 选择排序是不稳定的。算法复杂度O(n2)--[n的平方]。

实现:

【PHP编程】PHP程序员最应该掌握的几种排序算法

3、插入排序

描述:

在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。直接插入排序是稳定的。算法时间复杂度O(n2)--[n的平方]。

实现:

【PHP编程】PHP程序员最应该掌握的几种排序算法

4、快速排序

描述:

快速排序是对冒泡排序的一种本质改进。它的基本思想是通过一趟扫描后,使得排序序列的长度能大幅度地减少。在冒泡排序中,一次扫描只能确保最大数值的数移到正确位置,而待排序序列的长度可能只减少1。快速排序通过一趟扫描,就能确保某个数(以它为基准点吧)的左边各数都比它小,右边各数都比它大。然后又用同样的方法处理它左右两边的数,直到基准点的左右只有一个元素为止。

实现:

【PHP编程】PHP程序员最应该掌握的几种排序算法

以上四种排序算法,虽然可以实现数据的排序,但在实际工作中是否使用它们,还是得视情况而定,因为在某些情况下,PHP内置的sort系列函数就可以实现数据排序。如:

  • sort():对数组排序。

  • uasort():使用用户自定义的比较函数对数组中的键值进行排序。

  • uksort():使用用户自定义的比较函数对数组中的键名进行排序。

  • usort():使用用户自定义的比较函数对数组进行排序。

  • arsort():对关联数组按照键值进行降序排序。

  • asort():对关联数组按照键值进行升序排序。

本文“系编码之道”原创,转载请注明出处。


【PHP编程】PHP程序员最应该掌握的几种排序算法

相关文章