数据结构:数组

快速排序是数字排序常用的排序算法,个人理解核心思想是通过选定数组中的一个中间值,比较当前选中的中间值和其他值的大小

将小于中间值的数放在一个数组中,比中间值大的放在另外一个数组中,然后递归该方法,得到两边的排序,最后拼接起来。

时间复杂度:O(nlgn)

具体代码实现如下:

package main

import "fmt"

/**
 * @Author KyrieWang
 * @Description //TODO quicksort 时间复杂度为 O(nlgn)
 * @Date 9:48 上午 2021/3/29
 * @Param
 * @return
 */
func QuickSort(arr []int) []int {
	if len(arr) <= 1 {
		return arr
	}

	startArr := arr[0]
	lowData := make([]int, 0)
	highData := make([]int, 0)
	sameData := make([]int, 0)
	for i := 0; i < len(arr); i++ {
		if arr[i] < startArr {
			lowData = append(lowData, arr[i])
		} else if arr[i] > startArr {
			highData = append(highData, arr[i])
		} else {
			sameData = append(sameData, arr[i])
		}
	}
	lowData, highData = QuickSort(lowData), QuickSort(highData) //递归进行排序

	return append(append(lowData, sameData...), highData...) // append ...追加多个参数
}

func main() {
	data := []int{1, 5, 2, 4, 12, 21, 8, 12, 31, 24, 12, 14, 23}
	listData := QuickSort(data)
	fmt.Println(listData)
}

 

posted on 2021-03-29 21:33  王章章章  阅读(81)  评论(0编辑  收藏  举报