Python実装ルックアップ配列における任意のk番目に大きいデジタルアルゴリズムの例

1476 ワード

この例では,Python実装ルックアップ配列における任意のk番目に大きいデジタルアルゴリズムについて述べる.皆さんの参考にしてください.具体的には以下の通りです.
partionメソッドを模倣し,high=lowがkより小さい場合,後半で探索し,high=lowがkより大きい場合,前半で探索する.速い列とは違って、毎回半分のソートが減っています.

def partitionOfK(numbers, start, end, k):
  if k < 0 or numbers == [] or start < 0 or end >= len(numbers) or k > end:
    return None
  low = start
  high = end
  key = numbers[start]
  while low < high:
    while low < high and numbers[high] >= key:
      high -= 1
    numbers[low] = numbers[high]
    while low < high and numbers[low] <= key:
      low += 1
    numbers[high] = numbers[low]
  numbers[low] = key
  if low < k:
    return partitionOfK(numbers, start + 1, end, k)
  elif low > k:
    return partitionOfK(numbers, start, end - 1, k)
  else:
    return numbers[low]
numbers = [3,5,6,7,2,-1,9,3]
print(sorted(numbers))
print(partitionOfK(numbers, 0, len(numbers) - 1, 5))


出力:5番目のソート数を返します.
[-1, 2, 3, 3, 5, 6, 7, 9] 6
PS:ここでは、ソートに関するプレゼンテーションツールをお勧めします.参考にしてください.
挿入/選択/バブル/マージ/ヒル/クイックソートアルゴリズムプロセスツールをオンラインアニメーションで実証します.http://tools.jb51.net/aideddesign/paixu_ys
Pythonに関する詳細について興味のある読者は、「Pythonデータ構造とアルゴリズムチュートリアル」、「Pythonリスト(list)操作テクニック総括」、「Pythonコード操作テクニック総括」、「Python関数使用テクニック総括」、「Python文字列操作テクニック総括」、「Python入門と進級経典チュートリアル」を参照してください.
ここではPythonプログラムの設計に役立つことを願っています.