学习了Go的语法之后上洛谷熟练一下,发现快排其实也有讲究
Quicksort
普通快排
随机选值或者选择最左边的值,设i、j两指针
1 | func quicksort(num []int, left, right int) { |
双路快排
双路快排的重点就在于解决在相等元素众多时导致的复杂度退化的问题,可以减少递归纵深,是课堂上的常见版本
1 | void quicksort(vector<int>& num, int left, int right) { |
三路快排
算法让[lt,gt]都等于pivot,在双路快排基础上再进一步减少了重复元素比对的复杂度
1 | void threeWayQuickSort(vector<int>& arr, int low, int high) { |
第k小值
直接使用第一种写法
1 | package main |
说些什么吧!