Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで挿入ソートを使用して配列をソートするために必要なシフト数を見つけるプログラム


配列が与えられ、その配列に対して挿入ソートを実行するように求められたとします。挿入ソートでは、配列内の各要素が配列内の正しい位置にシフトされます。配列をソートするために必要なシフトの総数を見つける必要があります。シフトの総数は整数であり、配列がすでにソートされている場合は、0を返します。

したがって、入力がinput_array =[4、5、3、1、2]のようである場合、出力は8

になります。
[4, 5, 3, 1, 2] = 0 shifts

[4, 5, 3, 1, 2] = 0 shifts

[3, 4, 5, 1, 2] = 2 shifts

[1, 3, 4, 5, 2] = 3 shifts

[1, 2, 3, 4, 5] = 3 shifts

シフトの総数は=0+ 0 + 2 + 3 + 3=8です。

これを解決するには、次の手順に従います-

  • 長さ:=input_arrのサイズ
  • temp_arr:=0で初期化されたサイズ1000001の新しいリスト
  • ans:=0
  • input_arrの各項目について、
    • val:=item
    • val> 0の場合、do
      • ans:=ans + temp_arr [val]
      • val:=val-(val AND -val)
    • val:=item
    • val <=1000000の間、do
      • temp_arr [val]:=temp_arr [val] + 1
      • val:=val +(val AND -val)
  • ans:=length *((length-1)/ 2のフロア値)-ans
  • 回答を返す

理解を深めるために、次の実装を見てみましょう-

def solve(input_arr):
   length = len(input_arr)
   temp_arr = [0] * 1000001
   ans = 0
   for item in input_arr:
      val = item
      while val > 0:
         ans += temp_arr[val]
         val -= val & -val
      val = item
      while val <= 1000000:
         temp_arr[val] = temp_arr[val] + 1
         val += val & -val
   ans = length * (length - 1) // 2 - ans
   return ans

print(solve([4, 5, 3, 1, 2]))

入力

[4, 5, 3, 1, 2]

出力

8

  1. 配列の合計を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列が与えられた場合、与えられた配列の合計を計算する必要があります。 ここでは、ブルートフォースアプローチに従うことができます。つまり、リストをトラバースし、各要素を空の合計変数に追加します。最後に、合計の値を表示します。 以下で説明するように、組み込みの合計関数を使用して別のアプローチを実行することもできます。 例 # main arr = [1,2,3,4,5] ans = sum(arr,n) print ('Sum of the array is '

  2. Pythonプログラムでの挿入ソート

    この記事では、Python3.xでの挿入ソートの実装について学習します。またはそれ以前。 アルゴリズム ソートされた配列を各反復で拡張することにより、入力要素を反復します。 現在の要素を、並べ替えられた配列で使用可能な最大値と比較します。 現在の要素の方が大きい場合は、その要素をそのままにして次の要素に移動します。それ以外の場合は、並べ替えられた配列内で正しい位置を見つけて、配列内のその位置に移動します。 これは、並べ替えられた配列内の現在の要素よりも大きいすべての要素を右にシフトすることで実現されます。 それでは、アルゴリズムの視覚的表現を見てみましょう