golang-merge-sort

本文介绍了一种使用Go语言实现的迭代版归并排序算法。通过对数组进行逐步合并操作来实现排序,详细展示了每一步的合并过程及内部变量的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package main

import (
	"fmt"
)

func main() {
	var arr = []int{6, 5, 3, 1, 8, 7, 2, 4, 9}
	fmt.Println(arr)
	fmt.Println(MergeSort(arr))
}

func MergeSort(arr []int) []int {
	var alen = len(arr)
	var ns = make([]int, alen, alen)

	var tmp = &arr
	var stmp = &ns
	for add := 1; add < alen; add *= 2 {
		fmt.Println(add)
		var start1 = 0
		var start2 = 0
		ik := 0
		for start1 = 0; start1 < alen; start1 = start1 + add {
			start2 = start1 + add
			var end1 = start1 + add
			var end2 = start2 + add
			for start1 < end1 && start2 < end2 && start1 < alen && start2 < alen {
				if (*tmp)[start1] < (*tmp)[start2] {
					(*stmp)[ik] = (*tmp)[start1]
					start1++
				} else {
					(*stmp)[ik] = (*tmp)[start2]
					start2++
				}
				ik++
				fmt.Println(*stmp)
			}

			for start1 < end1 && start1 < alen {
				(*stmp)[ik] = (*tmp)[start1]
				start1++
				ik++
				fmt.Println(*stmp)
			}

			for start2 < end2 && start2 < alen {
				(*stmp)[ik] = (*tmp)[start2]
				start2++
				ik++
				fmt.Println(*stmp)
			}
		}
		tmp, stmp = stmp, tmp
		for index, _ := range *stmp {
			(*stmp)[index] = 0
		}
	}
	return (*tmp)
}
迭代版的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值