用GO语言 实现 希尔排序
时间: 2023-07-23 19:03:58 浏览: 50
希尔排序是一种插入排序的改进版,它通过将待排序元素按照一定的间隔分组,对每组使用插入排序,然后逐步缩小间隔,直到间隔为1,最后使用插入排序完成排序。以下是用GO语言实现希尔排序的代码:
```go
func shellSort(arr []int) {
n := len(arr)
// 初始化间隔为n/2
gap := n / 2
for gap > 0 {
// 对各个分组进行插入排序
for i := gap; i < n; i++ {
temp := arr[i]
j := i
for j >= gap && arr[j-gap] > temp {
arr[j] = arr[j-gap]
j -= gap
}
arr[j] = temp
}
// 缩小间隔
gap /= 2
}
}
```
我们可以使用以下代码来测试希尔排序的实现:
```go
func main() {
arr := []int{5, 3, 8, 4, 2}
shellSort(arr)
fmt.Println(arr)
}
```
输出结果为:`[2 3 4 5 8]`,表示排序成功。
相关问题
用go语言 实现 希尔排序
希尔排序是一种插入排序的改进版,它通过将待排序元素按照一定的间隔分组,对每组使用插入排序,然后逐步缩小间隔,直到间隔为1,最后使用插入排序完成排序。以下是用GO语言实现希尔排序的代码:
```go
func shellSort(arr []int) {
n := len(arr)
// 初始化间隔为n/2
gap := n / 2
for gap > 0 {
// 对各个分组进行插入排序
for i := gap; i < n; i++ {
temp := arr[i]
j := i
for j >= gap && arr[j-gap] > temp {
arr[j] = arr[j-gap]
j -= gap
}
arr[j] = temp
}
// 缩小间隔
gap /= 2
}
}
```
我们可以使用以下代码来测试希尔排序的实现:
```go
func main() {
arr := []int{5, 3, 8, 4, 2}
shellSort(arr)
fmt.Println(arr)
}
```
输出结果为:`[2 3 4 5 8]`,表示排序成功。
用PHP语言 实现 希尔排序
下面是 PHP 语言实现希尔排序的代码:
```php
function shellSort($arr)
{
$n = count($arr);
for ($gap = floor($n / 2); $gap > 0; $gap = floor($gap / 2)) {
for ($i = $gap; $i < $n; $i++) {
$j = $i;
while ($j - $gap >= 0 && $arr[$j - $gap] > $arr[$j]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j - $gap];
$arr[$j - $gap] = $temp;
$j -= $gap;
}
}
}
return $arr;
}
```
使用方法:
```php
$arr = array(5, 3, 8, 4, 2);
$result = shellSort($arr);
print_r($result); // 输出:Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 [4] => 8 )
```
其中,shellSort 函数接收一个数组作为参数,返回排好序的数组。该函数使用希尔排序算法对数组进行排序。