Go实现归并排序算法

亦凉 2023-10-04 15:39 120阅读 0赞
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func MergeSort(arr []int) {
  6. size := len(arr)
  7. tempArray := make([]int, size)
  8. mergeSrt(arr, tempArray, 0, size-1)
  9. }
  10. func merge(arr []int, tempArray []int, lowerIndex int, middleIndex int, upperIndex int) {
  11. lowerStart := lowerIndex
  12. lowerStop := middleIndex
  13. upperStart := middleIndex + 1
  14. upperStop := upperIndex
  15. count := lowerIndex
  16. for lowerStart <= lowerStop && upperStart <= upperStop {
  17. if arr[lowerStart] < arr[upperStart] {
  18. tempArray[count] = arr[lowerStart]
  19. lowerStart++
  20. } else {
  21. tempArray[count] = arr[upperStart]
  22. upperStart++
  23. }
  24. count++
  25. }
  26. for lowerStart <= lowerStop {
  27. tempArray[count] = arr[lowerStart]
  28. count++
  29. lowerStart++
  30. }
  31. for upperStart <= upperStop {
  32. tempArray[count] = arr[upperStart]
  33. count++
  34. upperStart++
  35. }
  36. for i := lowerIndex; i <= upperIndex; i++ {
  37. arr[i] = tempArray[i]
  38. }
  39. }
  40. func mergeSrt(arr []int, tempArray []int, lowerIndex int, upperIndex int) {
  41. if lowerIndex >= upperIndex {
  42. return
  43. }
  44. middleIndex := (lowerIndex + upperIndex) / 2
  45. mergeSrt(arr, tempArray, lowerIndex, middleIndex)
  46. mergeSrt(arr, tempArray, middleIndex+1, upperIndex)
  47. merge(arr, tempArray, lowerIndex, middleIndex, upperIndex)
  48. }
  49. func main() {
  50. data := []int{9, 1, 8, 2, 7, 3, 6, 4, 5}
  51. MergeSort(data)
  52. fmt.Println(data)
  53. }

发表评论

表情:
评论列表 (有 0 条评论,120人围观)

还没有评论,来说两句吧...

相关阅读

    相关 归并排序算法(Java实现

    1、基本思想 归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列