ソート - カウント - 最適化されたバージョン

:ソート最適化されたバージョンカウント
引用します。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()の

 

 

 

おすすめ

転載: www.cnblogs.com/an-wl/p/12631457.html