用php写一个二分法排序代码
时间: 2023-09-03 22:25:36 浏览: 93
### 回答1:
以下是使用 PHP 编写二分法排序的示例代码:
```php
function binarySort($arr) {
$count = count($arr);
for ($i = 1; $i < $count; $i++) {
$low = 0;
$high = $i - 1;
$temp = $arr[$i];
while ($low <= $high) {
$mid = intval(($low + $high) / 2);
if ($temp < $arr[$mid]) {
$high = $mid - 1;
} else {
$low = $mid + 1;
}
}
for ($j = $i - 1; $j >= $low; $j--) {
$arr[$j + 1] = $arr[$j];
}
$arr[$low] = $temp;
}
return $arr;
}
```
上面的代码实现了一个简单的二分法排序算法。它遍历了数组并使用二分法将每个元素插入到正确的位置上,以得到一个排序好的数组。
使用方法:将需要排序的数组传递给 `binarySort` 函数,它将返回一个排序好的数组。例如:
```php
$arr = array(3, 6, 1, 8, 4, 9);
$sortedArr = binarySort($arr);
print_r($sortedArr);
```
输出结果:
```
Array
(
[0] => 1
[1] => 3
[2] => 4
[3] => 6
[4] => 8
[5] => 9
)
```
### 回答2:
二分法排序(二分插入排序)是一种在已经有序的数组中插入元素的一种排序算法。下面是用PHP写的一个简单的二分法排序代码:
```php
function binaryInsertionSort($arr) {
$length = count($arr);
for ($i = 1; $i < $length; $i++) {
$low = 0;
$high = $i - 1;
$temp = $arr[$i];
while ($low <= $high) { // 使用二分查找找到合适的插入位置
$mid = floor(($low + $high) / 2);
if ($arr[$mid] > $temp) {
$high = $mid - 1;
} else {
$low = $mid + 1;
}
}
for ($j = $i - 1; $j >= $low; $j--) { // 将插入位置之后的元素往后移
$arr[$j + 1] = $arr[$j];
}
$arr[$low] = $temp; // 将元素插入到正确的位置
}
return $arr;
}
// 测试
$array = [5, 2, 8, 9, 1, 3];
$sortedArray = binaryInsertionSort($array);
print_r($sortedArray);
```
该代码定义了一个名为`binaryInsertionSort`的函数来进行二分法排序。在函数中,首先获取数组的长度,然后遍历数组,从索引为1的位置开始插入元素。
在每次遍历时,初始化一个`low`变量为0,一个`high`变量为$i-1,获取待插入的元素值保存在`temp`变量中。
接下来使用二分查找算法找到合适的插入位置。在每次二分查找中,计算中间位置`mid`,如果`arr[mid] > temp`,则说明待插入的元素应该在`mid`的左侧,所以`high`更新为`mid - 1`;如果`arr[mid] <= temp`,则说明待插入的元素应该在`mid`的右侧,所以`low`更新为`mid + 1`。不断更新`low`和`high`直到`low <= high`为止。
找到插入位置后,需要将插入位置后的元素往后移一位,为待插入元素腾出位置。最后,将`temp`插入到正确的位置上。
最后,我们定义了一个测试用例数组`$array`,调用`binaryInsertionSort`函数对其进行排序,并输出排序结果。
### 回答3:
二分法排序(Binary Insertion Sort)是一种插入排序的变种,它通过将元素逐个插入有序的子数组中,来进行排序。与普通的插入排序不同的是,二分法排序使用二分查找来确定插入的位置,从而减少比较的次数。
下面是用PHP编写的二分法排序的代码:
```php
function binaryInsertionSort($arr) {
$len = count($arr);
for($i = 1; $i < $len; $i++) {
$value = $arr[$i];
$left = 0;
$right = $i - 1;
while ($left <= $right) {
$mid = floor(($left + $right) / 2);
if ($value < $arr[$mid]) {
$right = $mid - 1;
} else {
$left = $mid + 1;
}
}
for($j = $i - 1; $j >= $left; $j--) {
$arr[$j+1] = $arr[$j];
}
$arr[$left] = $value;
}
return $arr;
}
// 测试
$arr = [5, 3, 8, 2, 1, 0];
$sortedArr = binaryInsertionSort($arr);
echo implode(', ', $sortedArr);
```
以上代码中,binaryInsertionSort函数接受一个待排序的数组,并使用二分法排序算法对其进行排序。它使用循环来遍历待排序数组,通过二分查找找到插入位置,然后通过插入操作将当前元素插入到有序的子数组中。最后,返回排序好的数组。
在给定的示例中,原始数组为[5, 3, 8, 2, 1, 0],排序后的结果为[0, 1, 2, 3, 5, 8]。