首页 > 其他 > 详细

快排(golang实现) 递归方法

时间:2018-08-13 11:44:09      阅读:439      评论:0      收藏:0      [点我收藏+]

递归方法,逻辑简洁清晰。这个算法还是很重要的,需要重点记忆理解,面试经常考,与傅里叶变换等并称“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实现) 递归方法

原文:https://www.cnblogs.com/brave-xin/p/9466840.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!