快排(golang实现) 递归方法
Posted brave-xin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快排(golang实现) 递归方法相关的知识,希望对你有一定的参考价值。
递归方法,逻辑简洁清晰。这个算法还是很重要的,需要重点记忆理解,面试经常考,与傅里叶变换等并称“20世纪十大算法”。
快速排序算法的平均时间复杂度是 O(nlogn),最坏情况时间复杂度是 O(n^2)。
package main import ( "fmt" ) func main() { var arr = []int{4, 7, 6, 8, 3, 2, 8, 1} fmt.Println(arr) quickSort(arr, 0, len(arr)-1) fmt.Println(arr) } func quickSort(arr []int, startIndex, endIndex int) int { // 递归结束条件:startIndex大等于endIndex的时候 if startIndex >= endIndex { return -1 } // 得到基准元素位置 var pivotIndex = partition(arr, startIndex, endIndex) // 根据基准元素,分成两部分递归排序(分治法) quickSort(arr, startIndex, pivotIndex-1) quickSort(arr, pivotIndex+1, endIndex) return 0 } func partition(arr []int, startIndex, endIndex int) int { // 取第一个位置的元素作为基准元素 var pivot = arr[startIndex] var left = startIndex var right = endIndex for left != right { //控制right指针比较并左移 for left < right && arr[right] > pivot { right-- } //控制right指针比较并右移 for left < right && arr[left] <= pivot { left++ } //交换left和right指向的元素 if left < right { p := arr[left] arr[left] = arr[right] arr[right] = p } } //pivot和指针重合点交换 p := arr[left] arr[left] = arr[startIndex] arr[startIndex] = p return left }
以上是关于快排(golang实现) 递归方法的主要内容,如果未能解决你的问题,请参考以下文章
8种面试经典排序详解--选择,插入,希尔,冒泡,堆排,3种快排及非递归,归并及非递归,计数(图+C语言代码+时间复杂度)
8种面试经典排序详解--选择,插入,希尔,冒泡,堆排,3种快排及非递归,归并及非递归,计数(图+C语言代码+时间复杂度)