簡単に並べ替えアルゴリズムを挿入してPythonプログラムの実現と簡単な改善を行います。
Python挿入順序を実現する一般的な例は以下の通りです。
しかし、私もまさにこの説明によって誤解されて、実現する時いくつかの回り道をしました。たとえば、以下のリストがあります。
それから、元素を比較し終わったら、適当な位置に移してもいいですか?スーパーに行って果物を買うなら、手に持ってくるのはよくないです。具体的には、アルゴリズムを実行するには、上のリストでも例を挙げると、現在の要素は10であり、まず隣接する21と比較してみると、21は10より大きいと、21は1ビット後に移動し、すなわち10の位置に移動する。その後10と11を比較して、また11を1つ後ろに移動します。要素5を比較したところ、10の保存すべき位置が見つかりました。このとき移動も完了しました。
コードの実装は以下の通りです。
#coding=cp936
#coding=cp936
#
def InsertionSort(A):
for j in range(1,len(A)):
key = A[j]
i = j-1
#
while i>=0 and A[i]>key:
A[i+1] = A[i]
i = i-1
A[i+1] = key
#
A = []
input = raw_input('please input some numbers:') # :7,6,5,1,8,34
for item in input.split(','):
A.append(int(item))
InsertionSort(A)#
print A
アルゴリズムを挿入する原理は、現在の要素と並べられている部分を比較し、条件を満たすときに挿入し、点を挿入した後の要素は全部後に移動します。しかし、私もまさにこの説明によって誤解されて、実現する時いくつかの回り道をしました。たとえば、以下のリストがあります。
test = [2, 5, 11, 21, 10, 18, 24]
例えば、現在の元素は10です。最初の実現構想はリストの最初の要素から始まり、元素11を比較してやっと適当な位置を見つけました。最終的には順序付けができます。しかし、問題があります。10を11の位置に挿入した後、11と21を後に移動する必要があります。これはまた別のサイクルが必要です。次のように実現します。
def insertSort(sort_list):
list_length = len(sort_list)
if list_length < 2 :
return sort_list
for i in range(1,list_length):
key = sort_list[i]
j = 0
while j < i:
if sort_list[j] > key:
for k in range(i,j,-1):
sort_list[k] = sort_list[k-1]
sort_list[j] = key
break
j += 1
return sort_list
まず,三つの循環変数と三層サイクルを導入し,効率が低い。次にコード構造が混乱します。改善が必要です。それから、元素を比較し終わったら、適当な位置に移してもいいですか?スーパーに行って果物を買うなら、手に持ってくるのはよくないです。具体的には、アルゴリズムを実行するには、上のリストでも例を挙げると、現在の要素は10であり、まず隣接する21と比較してみると、21は10より大きいと、21は1ビット後に移動し、すなわち10の位置に移動する。その後10と11を比較して、また11を1つ後ろに移動します。要素5を比較したところ、10の保存すべき位置が見つかりました。このとき移動も完了しました。
コードの実装は以下の通りです。
def insertSort(sort_list):
list_length = len(sort_list)
if list_length < 2 :
return sort_list
for i in range(1,list_length):
key = sort_list[i]
j = i - 1
while j >=0 and sort_list[j] > key:
sort_list[j+1] = sort_list[j]
j -= 1
sort_list[j+1] = key
return sort_list
どちらが優れていますか?どちらが優れていますか?