归并排序-Golang

归并排序核心思想

1、数组的拆分,使用递归方式进行拆分

2、归并,使用临时数组进行存储排序好的数据, 最后与原始数据进行替换

代码如下,具体的图流程,网上一抓一大把

package main

import "fmt"

func main() {

	arry := []int{2, 3, 1, 8, 5, 6}
	mergeSort(arry, 0, len(arry)-1)
	fmt.Println("arry:", arry)
}

func mergeSort(arry []int, l, r int) {
	if l >= r {
		return
	}
	// mid := l + (r-1)/2  错误
	// 获取mid生成方式使用 l +r /2,
	mid := (l + r) / 2

	mergeSort(arry, l, mid)
	mergeSort(arry, mid+1, r)

	sort(arry, l, mid, r)
}

func sort(arry []int, l, mid, r int) {

	i := l
	j := mid + 1 // j是第二个数组的开始
	temp := make([]int, 0)

	// 左右边界都没有出界
	for i <= mid && j <= r {
		if arry[i] <= arry[j] {
			temp = append(temp, arry[i])
			i++
		} else {
			temp = append(temp, arry[j])
			j++
		}
	}
	// 左边界出界
	for i > mid && j <= r {
		temp = append(temp, arry[j])
		j++
	}

	// 有边界出界
	for i <= mid && j > r {
		temp = append(temp, arry[i])
		i++
	}

	//重新赋值给arry
	for k, v := range temp{
		arry[l+k] = v
	}
}

你可能感兴趣的:(学习,golang,golang,开发语言,后端)