标签:ret 复杂 元素 turn ack 排序算法 递归 tar --
递归方法,逻辑简洁清晰。这个算法还是很重要的,需要重点记忆理解,面试经常考,与傅里叶变换等并称“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 }
标签:ret 复杂 元素 turn ack 排序算法 递归 tar --
原文地址:https://www.cnblogs.com/brave-xin/p/9466840.html