几个Golang实现的排序算法 - Go语言中文社区

几个Golang实现的排序算法


package main

import (
	"fmt"
)

func insert_sort(array []int) int {
	l := len(array)
	for i := 1; i < l; i++ {
		for j := i; j > 0; j-- {
			if array[j] < array[j-1] {
				array[j], array[j-1] = array[j-1], array[j]
			}
		}
	}
	return 0
}

func bubbling_sort(array []int) int {

	l := len(array)
	for i := l; i > 0; i-- {
		for j := 1; j < i; j++ {
			if array[j] < array[j-1] {
				array[j], array[j-1] = array[j-1], array[j]
			}
		}
	}
	return 0
}

func create_heap(array []int) {
	i := len(array) - 1
	for i > 0 {
		j := i
		i = (i+1)/2 - 1
		if array[i] < array[j] {
			array[i], array[j] = array[j], array[i]
		} else {
			break
		}
	}
	return
}

func pop_heap(array []int) int {
	l := len(array) - 1
	array[0], array[l] = array[l], array[0]
	i := 0
	for i < l {
		if ((i+1)*2 >= l) && ((2*(i+1) - 1) < l) {
			if array[i] < array[2*(i+1)-1] {
				array[i], array[2*(i+1)-1] = array[2*(i+1)-1], array[i]
				i = 2*(i+1) - 1
			}
			break
		} else if ((i+1)*2 - 1) >= l {
			break
		} else if array[2*(i+1)-1] > array[i] || array[2*(i+1)] > array[i] {
			if array[2*(i+1)-1] < array[2*(i+1)] {
				array[i], array[2*(i+1)] = array[2*(i+1)], array[i]
				i = 2 * (i + 1)
			} else {
				array[i], array[2*(i+1)-1] = array[2*(i+1)-1], array[i]
				i = 2*(i+1) - 1
			}
		} else {
			break
		}
	}

	return array[l]
}

func heap_sort(array []int) {
	l := len(array)
	for i := 2; i <= l; i++ {
		create_heap(array[:i])
	}
	for j := 0; j < l; j++ {
		pop_heap(array[:l-j])
	}
}

func qprocess(array []int) {

}

func quick_sort(array []int) {

	l := len(array)
	if l <= 1 {
		return
	}
	p := 0
	h := 0
	t := l - 1
	v := array[p]
	for h < t {
		for h < t && v < array[t] {
			t--
		}
		if h < t {
			array[p] = array[t]
			p = t
			h++
		}

		for h < t && v > array[h] {
			h++
		}
		if h < t {
			array[p] = array[h]
			p = h
			t--
		}

	}
	array[p] = v
	fmt.Println(array)
	quick_sort(array[:p])
	quick_sort(array[p+1:])

}

func main() {
	array := []int{5, 4, 8, 6, 1, 7, 3, 2, 0}
	fmt.Println("[begin]", array)
	quick_sort(array)
	fmt.Println("[end  ]", array)
}

转载于:https://my.oschina.net/jkkkls/blog/93370

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_34353714/article/details/91809014
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-27 18:02:10
  • 阅读 ( 1528 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢