'''排序演算法的實現'''
import random
def bubble_sort(l):
'''氣泡排序的實現
o(n**2)
穩定演算法
'''for i in range(len(l)):
for j in range(len(l) - i - 1):
if l[j] > l[j + 1]:
l[j], l[j + 1] = l[j + 1], l[j]
return l
def insert_sort(l):
'''插入排序
o(n**2)
穩定'''
count = len(l)
for i in range(1, count):
key = l[i]
j = i - 1
while j >= 0:
if l[j] > key:
l[j + 1] = l[j]
l[j] = key
else:
break
j -= 1
return l
def quick_sort(l):
'''快速排序
o(nlogn)
不穩定'''
if len(l) < 2:
return l
key = l[0]
lt = [x for x in l[1:] if x <= key]
gt = [x for x in l[1:] if x > key]
return quick_sort(lt) + [key] + quick_sort(gt)
def choice_sort(l):
'''選擇排序
o(n**2)
不穩定'''
count = len(l)
for i in range(count):
min = i
for j in range(i + 1, count):
if l[j] < l[min]:
min = j
l[i], l[min] = l[min], l[i]
return l
def shell_sort(l):
"""希爾排序
o(n**2)
不穩定"""
n = len(l)
gap = n // 2
while gap > 0:
for i in range(gap, n):
while i > 0:
if l[i - gap] > l[i]:
l[i], l[i - gap] = l[i - gap], l[i]
i -= gap
else:
break
gap //= 2
return l
def merge_sort(l):
'''歸併排序
o(nlongn)
穩定 '''
# 以下是歸併過程中分解的過程
n = len(l) // 2
if n <= 1:
return l
left = merge_sort(l[:n])
right = merge_sort(l[n:])
# 以下是歸併演算法中的合併的過程
result =
i, j = 0, 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
i += 1
else:
j += 1
# 迴圈退出,將left和right中剩下的元素放入到列表中
result += left[i:]
result += right[j:]
return result
if __name__ == '__main__':
l = [x for x in map(lambda x:random.randrange(50), range(10))]
print('原始列表: ', l)
bubble_sort(l)
print('氣泡排序: ', l)
insert_sort(l)
print('插入排序: ', l)
print('快速排序: ', quick_sort(l))
choice_sort(l)
print('選擇排序: ', l)
shell_sort(l)
print('希爾排序: ', l)
print('歸併排序: ', merge_sort(l))
演算法和資料結構 排序 快速排序
交換位置 交換順序表l中子表的記錄,使樞軸記錄到位,並返回其所在位置 此時在它之前 後 的記錄均不大 小 於它。int partition sqlist l,int low,int high return low 返回樞軸所在位置 對順序表l中的子串行l r low.high 作快速排序 void ...
c 演算法和資料結構 快速排序演算法
問題描述 快速排序演算法 描述 快速排序演算法 類名 quicksort public class quicksort while a i pivot i right 從左向右尋找大於支點元素 do while a j pivot j 0 從右向左尋找小於支點元素 if i j break else...
資料結構與演算法 演算法 演算法和資料結構
資料結構與演算法 演算法 好吧,在這裡,您被優秀或優秀的軟體開發人員所隔開。在這種情況下,我會告訴您一開始或至少在我的情況下,並且我知道大多數時候,對於我認識的大多數人,您會覺得自己是乙個無能的人或白痴。基本上,我怎麼可能不理解這一點,然後您會感到沮喪。在這種情況下,我會告訴您情況並不像您想的那麼糟...