快速排序-6.7

程序员日记      2019-08-11
定义快速排序的基本思想是:通过一趟排序将待排序的记录分割独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可对这两部分记录继续进行排序,以达到整个序列有序的目的代码实现/***快速排序*@param$arr*@returnarray*/functionquickSort($arr){$len=count($arr);if($len<1){return$arr;//剩下一个元素,不用排了}$mid=$arr[0];//取出第一个为中枢值$left=[];//左半轴$right...
标签:
58 人看过

归并排序-6.6

程序员日记      2019-08-11
定义假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到ceil(n/2)[ceil,向上取整]个长度为2或1的有序子序列,再两两归并,...,如此重复,得到一个长度为n的有序序列位置,这种排序方法称为2路归并排序。代码实现functionmergeSort(&$arr){$start=0;$end=count($arr)-1;//数组下标短一位mSort($arr,$start,$end);}functionmSort(&$arr,$...
标签:
63 人看过

堆排序-6.5

程序员日记      2019-08-11
堆堆是具有以下性质的二叉树堆总是一棵完全二叉树每个结点都大于或等于其左右结点的孩子的值,称为大根堆或者每个结点都小于或等于其左右结点的孩子的值,称为小根堆堆排序将待排序的序列构造成一个大顶堆(小顶堆),此时整个序列的最大值就是堆顶的根结点,将它移走(与数组末端的元素交换,此时末尾元素就是最大值),然后将剩余的(n-1)个序列重新构造一个堆,这样就会等到n个元素的次小值,如此反复执行,就能得到一个有序序列了。代码实现辅助函数/***交换数组元素位置函数*@paramarray$arr*@param...
标签:
53 人看过

希尔排序-6.4

程序员日记      2019-08-11
定义希尔排序是按数组下标进行一定的增量分组,对每一组使用直接插入排序,随着增量的逐渐减少到1,整个序列恰好被分为一组,算法便终止。代码实现/***希尔排序*@param$arr*/functionshellSort(&$arr){$len=count($arr);$inc=$len;//增量先设置为lendo{$inc=ceil($inc/2);//折半计算增量序列,一直到1for($i=$inc;$i<$len;$i++){if($arr[$i]<$arr[$i-$inc]...
标签:
57 人看过

直接插入排序-6.3

程序员日记      2019-08-11
定义直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数加1的有序表。代码实现/***插入排序*@param$arr*/functioninsertSort(&$arr){for($i=1;$i<count($arr);$i++){if($arr[$i]<$arr[$i-1]){//需要将$arr[$i]插入字表$temp=$arr[$i];//设置哨兵for($j=$i-1;$j>=0&&$arr[$j]>$te...
标签:
58 人看过

简单选择排序-6.2

程序员日记      2019-08-11
简单选择排序简单选择排序法就是通过n-i次关键字比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换代码实现1.辅助函数/***交换数组元素位置函数*@paramarray$arr*@param$i*@param$j*/functionswap(&$arr=[],$i,$j){$temp=$arr[$i];$arr[$i]=$arr[$j];$arr[$j]=$temp;}2.算法实现/***选择排序*@param$arr*/functions...
标签:
51 人看过

冒泡排序-6.1

程序员日记      2019-08-11
排序分类排序一般分为:插入排序,交换排序,选择排序和归并排序冒泡排序定义一种交换排序,它的基本思想是,两两比较相邻记录的关键字,如果反序则交换,知道没有反序的记录位为止。冒泡排序算法的原理:1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3.针对所有的元素重复以上的步骤,除了最后一个。4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。实现辅助函数/***交换数组...
标签:
55 人看过