:ソート最適化されたバージョンカウント
引用します。https://www.cnblogs.com/xiaochuan94/p/11198610.html
基本的なバージョンは、一般的なケースを解決することができますが、それは欠陥を持っているが、それは無駄なスペースがあることです。
例えばデータの、一組{} 101,109,108,102,110,107,103、アイデアの基本バージョンに応じて前記最大値110、、として
、我々は、アレイ111のカウント長さを作成する必要があり、我々は見つけることができ、[0100]は完全にそれの前にスペースを無駄にし、
次いで方法最適化?
最大-最小+ 1として、配列の長さ、即ち、唯一の最大値を見つけるだけでなく、両者の間のカウント差に応じて配列の長さを決定するために、最小値を識別します。
Pythonのアルゴリズム:
インポート数学 DEF countSort(データ) #1 仮定大幅に最小の負の無限大、最大の正の無限大に大きく listMin =フロート(「INF 」) listMax =フロート(「-INF 」) #配列データの最大値を見つけ、最小 用 I で:データ listMax = MAX(I、listMax) listMin = 分(I、listMin) #の初期カウントアレイカウント countList = [0] *(listMax - listMin + 1 ) #素子数のアレイの割り当ての各々に、データリストすなわち、インデックスがcountList値は、 #の数の値に対応するインデックス位置が表示さは、要素にcountList次に、最小値、新しいインデックスを差し引くこと数を示し 用 I におけるデータ: countList [I -listMin] + 1 =。 #結果アレイ作成 resultListを= [0] * lenは(データ) #は、得られた配列を作成開始インデックス インデックス= 0 のための I における範囲(LEN(countList))。 #回数だけ、その値が0より大きい、表示される指示の数である場合に0より大きい統計が表示されている 一方 countList [I]> 0: #1 、iの値は、最小の補数を減算、比較の数に必要なリストを表します上 resultList [インデックス] = I + listMinの インデックス + 1 =。 #出現保存の1。 countList [I] - 。= 1 リターンresultList DEF メイン(): データ =リスト(地図(int型、INPUT(" ソートするリストを入力し、カンマで区切っ:").split(" " ))) #101,109,108,102,110,107,103 RTN = countSort(データ) を印刷(「カウント配列決定結果次のとおりです。"終了= " " ) を印刷(RTN)IF __name__ == " __main__ " : main()の