Python常見的排序算法

冒泡

比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。 針對所有的元素重複以上的步驟,除了最後一個。 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較
a = [45,85,3,45,96,27,85,91]

for i in range(len(a)-1):
	for j in range(0,len(a)-1-i):
		if a[j] > a[j+1]:
			a[j], a[j+1] = a[j+1], a[j]

print(a)

最優時間複雜度爲:o(n)
最壞時間複雜度爲:o(n²)

選擇

1.設第一個元素爲比較元素,依次和後面的元素比較,比較完所有元素找到最小的元素,將它和第一個元素互換
2.重複上述操作,我們找出第二小的元素和第二個位置的元素互換,以此類推找出剩餘最小元素將它換到前面,即完成排序

a = [45,85,3,45,96,27,85,91]

for i in range(0, len(a)-1):
	for j in range(i+1, len(a)):
		if a[i] > a[j]:
			a[i], a[j] = a[j], a[i]

print(a)

最優時間複雜度爲:o(n²)
最壞時間複雜度爲:o(n²)

插入

後面的一次向前比較
a = [45,85,3,45,96,27,85,91]

for i in range(1, len(a)):
	for j in range(i, 0, -1):
		if a[j] < a[j-1]:
			a[j], a[j-1] = a[j-1], a[j]

print(a)

最優時間複雜度爲:o(n)
最壞時間複雜度爲:o(n²)

快速排序

對於一串序列,首先從中選取一個數,凡是小於這個數的值就被放在左邊一摞,凡是大於這個數的值就被放在右邊一摞。然後,繼續對左右兩摞進行快速排序。

def fast_sort(a, start, end):

    if start >= end:
        return

    mid = a[start]
    low = start
    high = end
    while low < high:
        while low < high and a[high] >= mid:
            high -= 1
        a[low] = a[high]
        while low < high and a[low] < mid:
            low += 1
        a[high] = a[low]
    a[low] = mid

    fast_sort(a, start, low - 1)
    fast_sort(a, low + 1, end)


a = [22, 34, 45, 66, 16, 10, 18, 28]

fast_sort(a, 0, len(a) - 1)

print(a)


最優時間複雜度爲:o(logn)
最壞時間複雜度爲:o(n²)

二分法查找

(有序)
最優時間複雜度爲:o(1)
最壞時間複雜度爲:o(logn)

遞歸(效率低)

def search(a,item):
	if len(a) == 0:
		return False
	elem = item
	mid = len(a) // 2
	if elem == a[mid]:
		return True
	elif elem > a[mid]:
		return search(a[mid + 1:], item)
	else:
		return search(a[:mid], item)


非遞歸(效率高)

a = [22, 34, 45, 66, 16, 10, 18, 28]

def search(a, item):
	low = 0
	high = len(a) - 1

	while low <= hing:
		mid = (low + high) // 2
		if item == a[mid]:
			return True
		elif item > a[mid]:
			low = mid + 1
		else:
			high = mid - 1
	return False

print(search(a, 18))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章