golang 堆排序

func HeapSort(arr []int, start, end int) {
	first := start
	hi := end - start
	lo := 0
	// 建堆
	for i := hi / 2; i >= 0; i-- {
		heapify(arr, i, hi, first)
	}
	//数据pop
	for i := hi; i >= 0; i-- {

		Swap(&arr[first], &arr[first+i])
        //将最大的元素放到末位前面的元素需要重新建堆
		heapify(arr, lo, i, first)

	}

}

func heapify(arr []int, lo, hi, first int) {

	root := lo
	for {
		child := 2*root + 1
		if child >= hi {
			break
		}
		if child+1 < hi && arr[child] < arr[child+1] {
			child++
		}
		if arr[root] > arr[child] {
			return
		}
		Swap(&arr[root], &arr[child])
		root = child
	}

}
func Swap(a, b *int) {
	temp := *a
	*a = *b
	*b = temp
}

主要是建堆得过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值