golang 实现快速排序

golang算法实现

golang 实现一个快排



思想

大而化小, 分而治之
将列表看成, 左边, 中值, 右边, 三部分, 使用递归的思想.所有的中值都会排好序, 数列就会排好序


实现

package main

import "fmt"

var testList = make([]int, 10)

func quickSort(unSortList []int) {
	// 分裂准备
	quickHelper(unSortList, 0, len(unSortList)-1)
}

func quickHelper(aList []int, first, last int){
	if first < last{
		//获取分裂点
		splitPoint := partition(aList, first, last)
		//通过分裂点, 将左右两个子列表分别快排
		quickHelper(aList, first, splitPoint-1)
		quickHelper(aList, splitPoint+1, last)
	}
}


// 获取中值
func partition(aList []int, first, last int)int{
	pivotValue := aList[first]
	leftMark := first+1
	rightMark := last
	done := false
	for !done{
		for leftMark <= rightMark && aList[leftMark] <=pivotValue{
			leftMark ++
		}
		for rightMark >= leftMark && aList[rightMark]>=pivotValue{
			rightMark --
		}
		if rightMark < leftMark{
			done = true
		}else {
			temp := aList[leftMark]
			aList[leftMark] = aList[rightMark]
			aList[rightMark] = temp
		}
	}
	//中值就位
	temp := aList[first]
	aList[first] = aList[rightMark]
	aList[rightMark] = temp
	return rightMark
}


func main() {
	testList = []int{9, 7, 2, 323, 43, 5, 6, 66, 45}
	quickSort(testList)
	fmt.Println(testList)      //[2 5 6 7 9 43 45 66 323]
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值