pythonのバブルソートとクイックソートの書き方
pythonのバブルソートと高速ソート
泡の順序付け:隣接する2つの要素を比較して、大きい列の後ろで、初めて最大の数を最後の1位に並べます;
列を続け、2番目に大きい数を最下位から2番目に...
バブルソートの合計数は、1+2+3+...+n-1、n(n-1)/2、時間複雑度はn平方である.
方法(2)
≪最適化|Optimization|emdw≫:バブル・ソートが交換なしに1回実行された場合、リストが秩序化された状態であることを示し、アルゴリズムを直接終了できます.
≪クイック・ソート|Quick Sort|oem_src≫:配列の数を基準として選択し(一般的には1番目の最後のビットを選択します)、数値全体を基準より小さいものを左に、基準より大きいものを右に並べます.
新しく生成された数値の最初の数を選択してソートし続けます.時間複雑度nlogn
リストで式を生成するには、次の手順に従います.
泡の順序付け:隣接する2つの要素を比較して、大きい列の後ろで、初めて最大の数を最後の1位に並べます;
列を続け、2番目に大きい数を最下位から2番目に...
バブルソートの合計数は、1+2+3+...+n-1、n(n-1)/2、時間複雑度はn平方である.
def bubble_sort(li):
s=range(len(li))[::-1] # [7, 6, 5, 4, 3, 2, 1, 0]
for i in s:
for j in range(i):
if li[j]>li[j+1]:
li[j],li[j+1]=li[j+1],li[j] #
return li
m=[12,32,4,5,6,8,0,90]
print(bubble_sort(m))
方法(2)
def dubble_sort(li):
for i in range(len(li)-1):#i ,
for j in range(len(li)-i-1):#j i ( )
if li[j]>li[j+1]:
li[j],li[j+1]=li[j+1],li[j]
return li
li=[5,6,78,9,34,56,90,0,4]
print(dubble_sort(li))
≪最適化|Optimization|emdw≫:バブル・ソートが交換なしに1回実行された場合、リストが秩序化された状態であることを示し、アルゴリズムを直接終了できます.
def dubble_sort2(li):
for i in range(len(li)-1):#i ,
change=False
for j in range(len(li)-i-1):#j i ( )
if li[j]>li[j+1]:
li[j],li[j+1]=li[j+1],li[j]
change=True
if not change:
return li
return li
li=list(range(1000))
print(dubble_sort2(li))
≪クイック・ソート|Quick Sort|oem_src≫:配列の数を基準として選択し(一般的には1番目の最後のビットを選択します)、数値全体を基準より小さいものを左に、基準より大きいものを右に並べます.
新しく生成された数値の最初の数を選択してソートし続けます.時間複雑度nlogn
def quick_sort(list):
if len(list)< 2: # ( )
return list
else: #
basevalue=list[0] #
less=[m for m in list[1:] if m < basevalue] #
equal=[n for n in list if n == basevalue]
greater=[s for s in list[1:] if s > basevalue] #
return quick_sort(less)+ equal+quick_sort(greater)
list=[9,8,11,88,77]
print(quick_sort(list))
# [8, 9, 11, 77, 88]
リストで式を生成するには、次の手順に従います.
quickSort = lambda array: array if len(array) <= 1 else quickSort([item for item in array[1:] if item <= array[0]]) + [array[0]] + quickSort([item for item in array[1:] if item > array[0]])