golang-merge-sort-recursive

package main

import (
	"fmt"
)

func main() {
	var arr = []int{6, 5, 3, 1, 8, 7, 2, 4, 9}
	var tmp = make([]int, len(arr), len(arr))
	start := 0
	end := len(arr)
	fmt.Println(arr)
	MergeSortRecursive(arr, tmp, start, end-1)
	fmt.Printf("finish :%v \n", arr)
	fmt.Printf("finish :%v \n", tmp)
}

func MergeSortRecursive(arr []int, tmp []int, start int, end int) {
	fmt.Printf("run : %d-%d\n", start, end)
	if start >= end {
		return
	}
	fmt.Printf("runing : %d-%d\n", start, end)
	var start1 int = start
	var end1 int = (end-start)>>1 + start1

	var start2 int = end1 + 1
	var end2 int = end

	var k = start1
	MergeSortRecursive(arr, tmp, start1, end1)
	MergeSortRecursive(arr, tmp, start2, end2)

	for ; start1 <= end1 && start2 <= end2; k++ {
		if arr[start1] < arr[start2] {
			tmp[k] = arr[start1]
			start1++
		} else {
			tmp[k] = arr[start2]
			start2++
		}
		fmt.Println(tmp)
	}
	for ; start1 <= end1; k++ {
		tmp[k] = arr[start1]
		start1++
		fmt.Println(tmp)
	}

	for ; start2 <= end2; k++ {
		tmp[k] = arr[start2]
		start2++
		fmt.Println(tmp)
	}

	for i := start; i <= end; i++ {
		arr[i] = tmp[i]
		tmp[i] = 0
		// unsort := append([]int{}, arr[end:]...)
		// tmp2 := tmp[i:end]
		// arr = append(append(arr[i:], tmp2[0:]...), unsort[0:]...)
	}
	fmt.Printf("last arr: %v\n", arr)
	return
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值