常见排序算法

go语言实现常见排序算法

  • 堆排

type taskHeap []int

func (h *taskHeap) Len() int {
	return len(*h)
}

func (h *taskHeap) Less(i, j int) bool {
	return (*h)[i] < (*h)[j]
}

func (h *taskHeap) Swap(i, j int) {
	(*h)[i], (*h)[j] = (*h)[j], (*h)[i]
}

func (h *taskHeap) Push(x interface{}) {
	*h = append(*h, x.(int))
}

func (h *taskHeap) Pop() interface{} {
	old := *h
	n := len(old)
	x := old[n-1]
	*h = old[0 : n-1]
	return x
}

func topK(all []int, k int) []int {
	h := new(taskHeap)
	heap.Init(h)

	for _, each := range all {
		if h.Len() < k {
			heap.Push(h, each)
		} else if (*h)[0].Duration < each.Duration {
			heap.Pop(h)
			heap.Push(h, each)
		}
	}

	return *h
}

  • 冒泡
func maopaoArray(nums []int) {
	for i:=0; i<len(nums); i++ {
		for j:=0;j<len(nums)-1-i;j++ {
			if nums[j] > nums[j+1] {
				nums[j], nums[j+1] = nums[j+1], nums[j]
			}
		}
	}
}
  • 快排
func quickSort(nums []int, start, end int) {
	if start >= end {
		return
	}
	mid := nums[start]
	low := start
	high := end

	for low < high {
		for low < high && nums[high] >= mid {
			high--
		}
		nums[low] = nums[high]
		for low < high && nums[low] < mid {
			low++
		}
		nums[high] = nums[low]
	}
	nums[low] = mid
	quickSort(nums, start, low-1)
	quickSort(nums, low+1, end)
}


}



  • 插入
func insertSort(nums []int) {
	for i:=0; i<len(nums); i++ {
		temp := nums[i]
		j := i
		for j > 0 && temp < nums[j-1] {
			nums[j] = nums[j-1]
			j--
		}
		if j != i {
			nums[j] = temp
		}
	}
}
  • 选择
func selectSort(nums []int) {
	var minIndex int
	for i:=0;i<len(nums);i++ {
		minIndex = i
		for j:=i+1;j<len(nums);j++ {
			if nums[j]<nums[minIndex]{
				minIndex = j
			}
		}
		nums[i], nums[minIndex] = nums[minIndex], nums[i]
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值