go 语言实现堆排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36431213/article/details/82853519
  • go 语言实现堆排序
package main

import (
	"fmt"
)

func buildHeap(arr []int) {
	length := len(arr)

	for i := (length / 2) - 1; i >= 0; i-- {
		toHeap(i, length-1, arr)
	}

}

func toHeap(i int, n int, arr []int) {

	max := i
	left := 2*i + 1
	right := 2*i + 2

	if left <= n && arr[max] < arr[left] {
		max = left
	}

	if right <= n && arr[max] < arr[right] {
		max = right
	}

	if max != i {
		arr[i], arr[max] = arr[max], arr[i]
		toHeap(max, n, arr)
	}
}

func heapSort(arr []int) {
	length := len(arr)
	buildHeap(arr)
	for {
		if length > 1 {
			arr[0], arr[length-1] = arr[length-1], arr[0]
			length--
			toHeap(0, length-1, arr)
		} else {
			break
		}
	}
}

func main() {

	arr := []int{9, 0, 6, 5, 8, 2, 1, 7, 4, 3}
	fmt.Println(arr)
	heapSort(arr)
	fmt.Println(arr)
}

猜你喜欢

转载自blog.csdn.net/qq_36431213/article/details/82853519
今日推荐