你能用go语言写一个归并排序,并解释你写的代码意思吗
时间: 2024-04-30 14:22:43 浏览: 12
当然可以。以下是用Go语言实现归并排序的代码及其解释:
```go
package main
import "fmt"
func merge(left, right []int) []int {
result := make([]int, 0)
for len(left) > 0 || len(right) > 0 {
if len(left) == 0 {
return append(result, right...)
}
if len(right) == 0 {
return append(result, left...)
}
if left[0] <= right[0] {
result = append(result, left[0])
left = left[1:]
} else {
result = append(result, right[0])
right = right[1:]
}
}
return result
}
func mergeSort(arr []int) []int {
if len(arr) <= 1 {
return arr
}
mid := len(arr) / 2
left := arr[:mid]
right := arr[mid:]
left = mergeSort(left)
right = mergeSort(right)
return merge(left, right)
}
func main() {
arr := []int{9, 7, 8, 3, 2, 1}
fmt.Println("Unsorted array:", arr)
arr = mergeSort(arr)
fmt.Println("Sorted array:", arr)
}
```
解释:
1. `merge`函数接收两个切片,将它们归并排序,并返回归并后的新切片。该函数使用了循环和条件语句来实现归并排序的逻辑。
2. `mergeSort`函数接收一个切片,如果该切片的长度小于等于1,则直接返回该切片。否则,将该切片分为两半,分别递归调用`mergeSort`函数,最后将返回的两个有序的切片归并排序,得到最终的有序切片。
3. 在`main`函数中,我们定义了一个未排序的切片,使用`mergeSort`函数对其进行归并排序,并打印出排序前后的切片。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)