ソートアルゴリズムの概要
バブルソート
二つの隣接する要素は、2つの2サイクル、(領域後順序付け)片道最大値または最小値フィルタ要素を比較します
def bubble_sort(data):
# 第一层循环:循环一次,代表一趟,并筛选出一个最大或最小元素
for i in range(len(data)-1):
temp = True
# 第二层循环:循环一次,表示相邻两个元素进行了一次比较
for j in range(len(data)-1-i):
if data[j] > data[j+1]:
# 相邻两个元素进行替换
data[j], data[j+1] = data[j+1], data[j]
temp = False
if temp:
return
選択ソート
初期値の要素(通常は最初の値)、第1のループ素子と比較してバック、選択された最終的最小値または最大値の各要素は(前に注文した領域)
def select_sort(data):
# 第一层循环:取出数组中的每个元素
for i in range(len(data)):
temp = i # 拿取一个元素用来比较
# 第二层循环:从第i后面的一个值开始循环,与data[i]进行比较
for j in range(i+1,len(data)):
if data[j] < data[temp]:
data[temp], data[j] = data[j], data[temp]
挿入ソート
サイクルが続く要素、順序付けられた素子領域ごとの比較に乱れおよびオーダー領域に加えから採取した要素として順序付けられた領域の最初の要素
def insert_sort(data):
# 第一层循环: 从第二个元素开始循环取出元素,与有序区元素进行比较
for i in range(1,len(data)):
temp = data[i]
j = i-1
while j>=0 and temp < data[j]:
data[j+1] = data[j] # i = j+1
j = j-1 # 在与前面一个元素进行比较,所以j需要减1
# 当j = -1 就跳出循环,将temp值赋给第一个值,即data[0]
data[j+1] = temp
クイックソート
その要素p帰巣(ホーミング機能の確立を必要とする)ように、最初の要素pを取ります。
リスト(配列)は、2つの部分P、大Pよりも右側、左側よりも小さいPに分割されています。
再帰的な完全なシーケンシング。
+再帰的順序:二つの部分にそれをまとめます
# 归位函数,定位中间值P
def partition(data,left,right):
temp = data[left]
while left < right:
# 如果最右边的值大于中间值,则最右边值往后退一个位置,反之,就将值赋值给最左边位置
while left < right and data[right] >= temp:
right = right - 1
data[left] = data[right]
# 如果最左边的值小于中间值,则最左边值往前进一个位置,反之,就将值赋值给最右边位置
while left < right and data[left] <= temp:
left = left + 1
data[right] = data[left]
# 循环结束,即可定位到中间位置,将初始值,赋值到这个位置
data[left] = temp
return left
def quick_sort(data,left,right):
if left< right:
mid = partition(data,left,right)
quick_sort(data,left,mid)
quick_sort(data,mid+1,right)
選択バブリング、時間計算量が挿入されていますO(n^2)
。
クイックソート時間の複雑さがありますO(nlogn)
シェルソート
パケットは、ヒルソートソートアルゴリズム挿入されています
まず、テイクd1 = n // 2
要素はに分割され、整数d1
群、隣接要素間の距離のそれぞれd1
、各群の直接挿入ソート。
次いで、第2の整数取るd2 = d1 // 2
までプロセス、パケット順序反復をd1 = 1
、次いで直接挿入全ての要素が同じグループにソート。
ヒルは、すべてのソートが近い秩序へのいくつかの要素が、全体的なデータを注文した旅行をしなかった。最後の旅行のすべてのデータがソート順をするように。
def shell_sort(data):
gap = len(data) // 2
while gap > 0:
for i in range(gap,len(data)):
temp = data[i]
j = i - gap
while j >= 0 and temp < data[j]:
data[j+gap] = data[j]
j = j-gap
data[j+gap] = temp
gap /= 2
ヒル時間の複雑さをソートすることである:O((1+T)n)
ほぼ等しくO(1.3n)
カウンティングソート
値が全て0(アレイ)であるのリストを追加し、使用してenumerate
インデックス値を、得られた順序付きリスト。
def count_sort(data):
count = [0 for _ in range(len(data)+1)]
for i in data:
count[i] += 1
data.clear()
for index, nums in enumerate(count):
for j in range(nums):
data.append(index)