PHP如何实现堆排序算法来处理长尾词排序问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2142个文字,预计阅读时间需要9分钟。
算法定义:在《大话数据结构》中,简单选择排序的算法如下:
简单选择排序:它的工作原理是,在待排序的n个记录中,每次从当前未排序的记录中选出最小(或最大)的一个记录,存放到序列的起始位置,然后,再从剩余的记录中继续寻找最小(或最大)的记录,然后放到已排序序列的末尾。以此类推,直到全部待排序的记录排完。
排序过程:在未排序的n个记录中,从第1个记录开始,在未排序的记录中寻找最小的一个记录,把它与第1个记录交换;然后,再从剩下的n-1个记录中寻找最小的一个记录,把它与第2个记录交换;以此类推,直到排序完成。
比较次数:简单选择排序需要比较n-1+n-2+...+2+1次,即(n-1)+(n-2)+...+2+1,这是一个等差数列求和,其结果为n(n-1)/2。
算法引进:
在这里我直接引用《大话数据结构》里面的开头:
在前面讲到 简单选择排序 ,它在待排序的 n 个记录中选择一个最小的记录需要比较 n - 1 次,本来这也可以理解,查找第一个数据需要比较这么多次是正常的,否则如何知道他是最小的记录。
可惜的是,这样的操作并没有把每一趟的比较结果保存下来,在后一趟的比较重,有许多比较在前一趟已经做过了,但由于前一趟排序时未保存这些比较结果,所以后一趟排序时又重复执行了这些比较操作,因而记录的比较次数较多。
如果可以做到每次在选择到最小记录的同时,并根据比较结果对其他记录做出相应的调整,那样排序的总体效率就会非常高了。而堆排序,就是对简单选择排序进行的一种改进,这种改进的效果是非常明显的。
本文共计2142个文字,预计阅读时间需要9分钟。
算法定义:在《大话数据结构》中,简单选择排序的算法如下:
简单选择排序:它的工作原理是,在待排序的n个记录中,每次从当前未排序的记录中选出最小(或最大)的一个记录,存放到序列的起始位置,然后,再从剩余的记录中继续寻找最小(或最大)的记录,然后放到已排序序列的末尾。以此类推,直到全部待排序的记录排完。
排序过程:在未排序的n个记录中,从第1个记录开始,在未排序的记录中寻找最小的一个记录,把它与第1个记录交换;然后,再从剩下的n-1个记录中寻找最小的一个记录,把它与第2个记录交换;以此类推,直到排序完成。
比较次数:简单选择排序需要比较n-1+n-2+...+2+1次,即(n-1)+(n-2)+...+2+1,这是一个等差数列求和,其结果为n(n-1)/2。
算法引进:
在这里我直接引用《大话数据结构》里面的开头:
在前面讲到 简单选择排序 ,它在待排序的 n 个记录中选择一个最小的记录需要比较 n - 1 次,本来这也可以理解,查找第一个数据需要比较这么多次是正常的,否则如何知道他是最小的记录。
可惜的是,这样的操作并没有把每一趟的比较结果保存下来,在后一趟的比较重,有许多比较在前一趟已经做过了,但由于前一趟排序时未保存这些比较结果,所以后一趟排序时又重复执行了这些比较操作,因而记录的比较次数较多。
如果可以做到每次在选择到最小记录的同时,并根据比较结果对其他记录做出相应的调整,那样排序的总体效率就会非常高了。而堆排序,就是对简单选择排序进行的一种改进,这种改进的效果是非常明显的。

