09 2013 档案
摘要:归并排序是成功应用分治技术的一个完美例子。分治法的思想是:(1)将问题的实例划分为同一个问题的几个较小的实例,最好拥有同样的规模;(2)对这些较小的实例求解(一般用递归方法,但在问题规模足够小的时候。有时也会利用另一个算法);(3)如果必要的话,合并这些较小问题的解,以得到原始问题的解。对于一个需要排序的数组$a[0...n-1],归并排序把它一分为二:$a[0..n/2-1]和$a[n/2...n-1],并对每个子数组递归排序,然后把这两个排好序的子数组合并为一个有序数组。 下面的这个图能够很好地解释归并排序的整个流程 递归的将一个数组分成两部分,直到小的足以解决问题就不再递归(一个数,一.
阅读全文
摘要:希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2 0; $fraction = floor($fraction / 2)) { for ($i = $fraction; $i = 0 && $arr[$j] > $arr[$fraction + $j]; $j -= $fraction) { $temp = $arr[$j]; ...
阅读全文
摘要:插入排序一般分为直接插入排序和二分插入排序。一、直接插入排序:直接插入排序又可以分为前插和后插,不过虽然是这样分,只是寻找地点的方向不一样而已。“前插”就是从头开始找合适的位置,“后插”就是从后面开始找合适的位置。直接插入排序的思想很简单,开始时,整个数组都是无序的,默认第一个数是排好序的,然后要把第二个数插入到前面,那么就要找到合适的位置插入,从当前数的前一个数$a与当前数$s进行比较,如果此时$a= 0 && $insertVal 2、后插: 插入流程: 初始状态: 17,3 ,25,14,20,(9) 第一次插入:3 ,17,25,14,(9,20) 第二次插入:3 ,1
阅读全文
摘要:快排简介:快速排序是一种基于分治技术的重要排序算法,是冒泡算法的一种改进。是由东尼.霍尔所发展的一种排序算法。在平均状况下,排序n个项目要O(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快排原理:快速排序用分治的思想,将一个整串分为两个子串。左边子串中所有的数都不会大于右边子串中的数。步骤为:(1)从数组中挑选一个数作为“中轴”,(选择中轴有许多不同的策略,不过我们一般会选择数组的第一个元素)。 (2)重...
阅读全文
摘要:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。排序实例初始关键字 [49 38 65 97 76 13 27 49] 第一趟排序后 13 [38 65 97 76 49 27 49] 第二趟排序后 13 27 [65 97 76 49 38 49] 第三趟排序后 13 27 38 [97 76 49 65 49] 第四趟排序后 13 27 38 49 [76 97 65 49 ] 第五趟排序后 13 27 38 49 49 [97 65 76] 第六趟排序后 13 27 38 49 49 65
阅读全文
摘要:冒泡排序是非常容易理解和实现,以从小到大排序举例: 设数组长度为N。 (1)比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。 (2)这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。 (3)N=N-1,如果N不为0就重复前面二步,否则排序完成。代码实现: 1.传统的算法: $a[$j + 1]) { $temp = $a[$j]; $a[$j] = $a[$j + 1]; $a[$j + 1] = $temp; ...
阅读全文

浙公网安备 33010602011771号