// 冒泡排序
function bubblesort($arr) {
for($i=0,$j=count($arr); $i<$j; $i++) {
for($k=$j-1; $k>$i; $k--) {
if ($arr[$k] < $arr[$k-1]) list($arr[$k-1], $arr[$k]) = array($arr[$k], $arr[$k-1]);
}
}
return $arr;
}
$arr = array(1,4,14,3,56,23,435,2,234,2,33,23,123);
print_r(bubblesort($arr));
// 快速排序
function quicksort($arr) {
if(($count = count($arr)) <= 1 ) return $arr;
$base = $arr[0];
$left = $right = array();
for($i=1; $i<$count; $i++) {
if($arr[$i] <= $base) $left[] = $arr[$i];
else $right[] = $arr[$i];
}
$left = quicksort($left);
$right = quicksort($right);
return array_merge($left, array($base), $right);
}
echo join(',', quicksort(array(1,3,23,5,234,65,6)));
// 插入排序
function insertsort($arr) {
for($i=1, $j=count($arr); $i<$j; $i++) {
$k = $i;
while($k > 0 && $arr[$k-1] > $arr[$k]) {
list($arr[$k], $arr[$k-1]) = array($arr[$k-1], $arr[$k]);
$k--;
}
}
return $arr;
}
$array=array(10,8,7,5,1,2,3,4);
print_r(insertsort($array));
// 选择排序, (非递归)
function selectsort($arr) {
for($i=0, $j=count($arr); $i<=$j; $i++) {
$min = $i;
$temp = $arr[$i];
for($k=$i+1; $k<$j; $k++) {
if($temp > $arr[$k]) {
$min = $k;
$temp = $arr[$k];
}
}
if($min != $i) list($arr[$min], $arr[$i]) = array($arr[$i], $arr[$min]);
}
return $arr;
}
$arr = array(9,3,11,23,90,99,12,34,22,87,32);
print_r(selectsort($arr));
// 选择排序(递归实现)
function selectsort2($arr, $start = 0) {
if(($count = count($arr)) == $start + 1) return $arr;
$new = array();
$min = $arr[$start];
$min_index = $start;
for($i=$start+1; $i<$count-1; $i++) {
if($arr[$i] < $min) {
$min = $arr[$i];
$min_index = $i;
}
}
if($arr[$start] != $min) list($arr[$start], $arr[$min_index]) = array($arr[$min_index], $arr[$start]);
return selectsort($arr, $start + 1);
}
$arr = array(9,3,11,23,90,99,12,34,22,87,32);
print_r(selectsort($arr));
<?php
// 二分法查找
function binarysearch($arr, $value, $start = 0, $end = NULL) {
if($end == NULL) $end = count($arr) - 1;
$index = floor(($start+$end)/2);
$base = $arr[$index];
if($value < $base) return binarysearch($arr, $value, $start, $index-1);
else if($value > $base) return binarysearch($arr, $value, $index+1, $end);
else return $index;
}
$arr = array(1, 3, 5, 6, 7, 8, 10, 12, 14, 16, 18, 20);
$value = 8;
echo binarysearch($arr, $value);
待续...
分享到:
相关推荐
冒泡排序 快速排序 选择排序 二分法排序 插入排序 快速选择排序 递归冒泡排序
实现直接插入排序,二分法插入排序、希尔排序,冒泡排序,快速排序,直接选择排序的算法.pdf
冒泡排序、快速排序和二分法查找的分析 Java
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
冒泡排序以及二分法查询冒泡排序以及二分法查询冒泡排序以及二分法查询冒泡排序以及二分法查询冒泡排序以及二分法查询
binary sort,二分法查找,binary search, 二分法排序,merge sort 混合排序,shell sort 希尔排序,insertion sort 插入排序。数据结构 data structure
是直接插入算法的改进 查找位置使用的是二分法
C语言实现的二分法快速查找|二分法排序|二分法查找C#
初学java的基础算法,巩固学习,面试常考的基础算法,自己面试被问了几次,所以总结出来给大家分享!!!!
二分法排序算法 C语言实现 个人爱好 希望相互学习
二分法排序和查找(C#)
适合有点基础的人使用,于软件水平考试,计算机等级考试等复习使用
Java常用排序算法&程序员必须掌握的8大排序算法+二分法查找 Java常用排序算法&程序员必须掌握的8大排序算法+二分法查找
二分法查找算法.doc
冒泡-快速-插入- 选择排序代码 还有个二分法查找
二分法查找 *进行二分法查找的前提是数组已有序 *查找范围的上下界
算法之排序专题 快速排序 二分法排序 等等 ……………… ……………… ……………… ……………… ………………
Java常用高效8大排序算法与二分法查找,适合正在学习算法和准备学习算法的算法爱好者和研究使用算法的开发人员使用。
冒泡排序是最常用的排序算法,再笔试中也非常常见,能手写出冒泡排序可以说是基本的素养。 算法重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,这样越大的元素会经由交换慢慢的...
Java常用排序算法源码 稳定:冒泡排序、插入排序、归并排序和基数排序;不稳定:选择排序、快速排序、希尔排序、堆排序