zoukankan      html  css  js  c++  java
  • Go算法学习-快速排序

    数据结构:数组

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

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

    时间复杂度: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)
    }
    
    你得先看重你自己,否则别人就会当你一钱不值。
  • 相关阅读:
    图论分类讨论 bzoj2503相框
    高精+卡特兰数 bzoj3907网格
    树状数组 [Usaco2010 Nov]Cow Photographs
    二分图+贪心优化 [2009国家集训队]最大收益
    UINavigationItem表示UINavigationBar中的控件
    游历的路线
    2019.9.4 清点人数
    [国家集训队]矩阵乘法
    POJ 1113 Wall 凸包 裸
    POJ 1556 The Doors 线段交 dijkstra
  • 原文地址:https://www.cnblogs.com/ajiffuu/p/14594403.html
Copyright © 2011-2022 走看看