Pythonは4つのソート(選択、泡立ち、挿入、高速)を実現

2913 ワード

Python実習4日目、今日はPythonで4つのソート方法を実現しました.
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))