PHP面试整理(二)数据结构基础-常用排序

2019-09-0119:04:39

即将毕业的PHP小学生,在网上看了很多面试资料和相关东西,在这里记录下来,有些地方可能会涉及到别人的原创,但是当时做笔记时候没有添加,如果冒犯,请告诉我,我会补充上注明来源。(学习路上有很多错误,和忽略的地方,希望大家能多多指正,谢谢!!!)

数据结构这里真的是超重要,后悔大二时候没好好学,没好好记一下,很多都是知其然,不知其所以然,所以写这篇,打算作为一个学习笔记(先写排序和树),欢迎纠正和补充。

常见排序算法

来源:如图

一、冒泡排序(摘自维基百科)

是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行,知道没有在需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素经由交换,慢慢“浮”到数列的顶端。

我的理解就是比较相邻的,然后交换。

 (大二课本上的)

 

 

 (截图来自维基百科)

在最好情况下,时间复杂度为O(n)

在最坏情况下,时间复杂度为O(n2)

在平均情况下,相同为O(n2)

是一种稳定的排序算法

二、快速排序

快速排序使用分治法策略来把一个序列分为较小和较大的两个子序列,然后递归的排序两个子序列

我的理解:从两头开始往中间找,若发生交换位置,则换方向,直到  i,j 相等。

 

 

 在最好情况下,时间复杂度为O(nlog2n)

 在最坏情况下,时间复杂度为O(n2)

 在平均情况下,时间复杂度为O(log2n)

是一种不稳定的排序方法。

三、插入排序

通过构建有序序列,对于未排序数据,在已排序数据中从后向前扫描,找到相应位置插入。

我的理解:分成两部分,有序和无序,在无序里按顺序取出,在有序里插入。直到无序里没有

 在最好的情况下,时间复杂度为O(n)

 在最坏的情况下,时间复杂度为O(n2)

 在平均的情况下,时间复杂度为O(n2)

是一种稳定的排序方法。

四、选择排序

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

我的理解:挑最小或者最大的放有序里,在从无序里找,在放有序里。(第一次时候是交换位置的)

 

 在最好的情况下,时间复杂度为O(n2)

 在最坏的情况下,时间复杂度为O(n2)

 在平均的情况下,时间复杂度为O(n2)

是一种不稳定的排序算法。

五、归并排序

归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。

我的理解:拆完排,在合并排

书上这一节有两小节,二路归并排序的非递归实现,二路归并排序的递归实现。

二路归并排序的非递归实现

二路归并排序的递归实现

 

在最好的情况下,时间复杂度为O(nlog2n)

在最坏的情况下,时间复杂度为O(nlog2n)

咋平均的情况下,时间复杂度为O(nlog2n)

是一种稳定的排序算法。

未完…………………………

猜你喜欢

转载自www.cnblogs.com/zhaoguofeng/p/11443201.html