QuickSort

代码

时间复杂度 O(nlogn)

最坏时间复杂度 O(N^2)

加一行什么代码能避免?

partition 逻辑开始前,加一个随机打乱或者随机选基准的操作

更适合自己体质的代码……

之前大一备战ACM竞赛的时候背过快排的模版 觉得很好记 还是统一用这个吧

Hoare 分区法 + 中点基准

最好记的写法是取中间元素作为基准,ij 从两头向中间走,逻辑完全镜像

不用特意去处理 Pivot 的交换,也不用纠结最后 Pivot 落在哪

这个代码还消除了因“重复元素”导致的O(N^2)

但是还是不能解决人为构造的对抗数据

要想几乎解决最坏时间复杂度O(N^2) 还是要随机选一个数作为pivot最好

const randomIndex = Math.floor(Math.random() * (right - left + 1)) + left;
const pivot = nums[randomIndex];

当然运气不好没办法……(当然概率极低) 遇到没招(笑哭……)

Life's a struggle, I'll conquer it.
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇