Pythonは4つのソート(選択、泡立ち、挿入、高速)を実現
2913 ワード
Python実習4日目、今日はPythonで4つのソート方法を実現しました.
1:ソート選択ソートは、実は最初の数を取って後ろの数と比較し、1ラウンド後に最小の数を1つ目にし、2つ目を取り、前の比較を繰り返すことです.まず例を挙げると、5つの数の場合、四輪は並べ替えられ、内循環は外循環に1を加えて始まります
バージョン1:
その後,数値を直接交換するたびにソート速度が遅くなり,下付きを交換すると速度が向上することが分かった.
改良版:
二:バブルソート:バブルソートは左から右へ2つずつ比較し、大きな値は右へ、各ラウンドの大きな値は右端まで、外層サイクル回数は選択ソートと同じですが、内層サイクルはlen(list)-i-1であることに注意してください.
バージョン1:
後にgithubでラクダの大神のPyt-100-daysはもっと高級な泡の順序を学んで、リンクはここで:github改善版:
3:挿入ソート挿入ソートは左から値を取り、左の値と比較します.左の値より小さい値を取ると交換されます.外層ループは1から始まります.内層ループから外層ループまでの値は、取るたびに値が入る前の値の位置に相当します.例えば、前に1、5、8がソートされています.次は挿入する値4で、1から比較すると4対5が小さく、4と5が互いに位置を交換し、その後5を持って後ろの8と比較し続け、5対8が小さく、位置を交換し、最後にソートを完了します.
四:快速に並べ替え四種類の並べ替えの中で最も速く並べ替えて、リストの中の1つの値を中間値として選択して、全体のリストを半分に分割して、中間をプラスして、左は中間値より小さくて、右は中間値より大きくて、それからどのように分けたリストの中の要素は2つより大きくて、つまり再帰を採用して、各リストがすべて1つの要素だけあるまで
1:ソート選択ソートは、実は最初の数を取って後ろの数と比較し、1ラウンド後に最小の数を1つ目にし、2つ目を取り、前の比較を繰り返すことです.まず例を挙げると、5つの数の場合、四輪は並べ替えられ、内循環は外循環に1を加えて始まります
バージョン1:
list=[1,2,5,6,4,7]
#
for i in range(len(list)-1):
for j in range(i+1,len(list)):
if(list[i]>list[j]): #
list[i],list[j]=list[j],list[i] #
print(list)
その後,数値を直接交換するたびにソート速度が遅くなり,下付きを交換すると速度が向上することが分かった.
改良版:
def choose_sort(list):
for i in range(len(list)-1):
min_index=i # i
for j in range(i+1,len(list)):
if(list[min_index]>list[j]): #
min_index=j #
list[i],list[min_index]=list[min_index],list[i] # ,
return list
print(choose_sort(list))
二:バブルソート:バブルソートは左から右へ2つずつ比較し、大きな値は右へ、各ラウンドの大きな値は右端まで、外層サイクル回数は選択ソートと同じですが、内層サイクルはlen(list)-i-1であることに注意してください.
バージョン1:
def bubble_sort1(list):
for i in range(len(list)-1):
for j in range(len(list)-1-i):
if(list[j]>list[j+1]): #
list[j],list[j+1]=list[j+1],list[j] # ,
return list
print(bubble_sort1(list))
後にgithubでラクダの大神のPyt-100-daysはもっと高級な泡の順序を学んで、リンクはここで:github改善版:
def bubble_sort2(list):
#
for i in range(len(list)):
flag=False
for j in range(len(list)-1-i):
if(list[j]>list[j+1]):
list[j],list[j+1]=list[j+1],list[j]
flag=True
#
if flag:
flag=False
#
for j in range(len(list)-i-2,1,-1):
if(list[j]
3:挿入ソート挿入ソートは左から値を取り、左の値と比較します.左の値より小さい値を取ると交換されます.外層ループは1から始まります.内層ループから外層ループまでの値は、取るたびに値が入る前の値の位置に相当します.例えば、前に1、5、8がソートされています.次は挿入する値4で、1から比較すると4対5が小さく、4と5が互いに位置を交換し、その後5を持って後ろの8と比較し続け、5対8が小さく、位置を交換し、最後にソートを完了します.
def insert_sort(list):
for i in range(1,len(list)): #
for j in range(i): #
if(list[i]
四:快速に並べ替え四種類の並べ替えの中で最も速く並べ替えて、リストの中の1つの値を中間値として選択して、全体のリストを半分に分割して、中間をプラスして、左は中間値より小さくて、右は中間値より大きくて、それからどのように分けたリストの中の要素は2つより大きくて、つまり再帰を採用して、各リストがすべて1つの要素だけあるまで
def fast_sort(list):
if(len(list)>1): # ,
mid=list[len(list)//2] #
left,right=[],[] #
list.remove(mid) #
for i in range(len(list)): #
if(list[i]>mid):
right.append(list[i]) #
else:
left.append(list[i]) #
return fast_sort(left)+[mid]+fast_sort(right) #
else:
return list
print(fast_sort(list))