yashiganiの英傑になるまで死ねない日記

週末はマスターバイクでハイラルを走り回ります

Pythonでクイックソート書いてみたらクイックソートがゲシュタルト崩壊した

なにを言ってるのかわからねーと思うが,俺にもわからねえ
とにかく,見てくれ
こいつをどう思う?

def qsort(L):
  pivot = len(L) // 2

  # いっこになってたらおしまい
  if not pivot:
    return L

  # L[pivot]より小さい値はsmallerに,大きい値はbiggerに
  smaller = [x for x in L if x < L[pivot]]
  bigger  = [x for x in L if x > L[pivot]]

  smaller = qsort(smaller)
  bigger  = qsort(bigger)

  # 合体
  L = smaller + L[pivot:pivot + 1] + bigger
  return L


実行結果

>>> python3.1 qsort.py
before =  [8, 4, 3, 7, 6, 5, 2, 1]
result =  [1, 2, 3, 4, 5, 6, 7, 8]


「よーしパパ,リスト内包表記使っちゃうぞー」とかPythonのリッチな機能を使ってたらどうもチートくさくなった
けど,リスト内包表記キモくてとてもかわいい
ういやつ
結構スッキリ書けたと思うけど,合体んとこの代入文がエレガントじゃないのでなんとかしたい
スライシングじゃなくて,普通にリストにすればよかったかな?


というか,これはクイックソートと呼んでええんやろうか?


追記
配列に重複がある場合,抜け落ちることに気づいた