golang 实现快速排序

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]
}

你可能感兴趣的:(学习分享,golang,算法,开发语言)