四種排序方法是學習理解編程語言的需要,本文只是簡單舉例並貼出代碼,不做詳細的算法原理解析!
冒泡排序
冒泡排序是最爲基礎的算法,需要理解和掌握,它是對序列進行遍歷交換的過程,大的元素移動到末尾,直到隊列有序!
nums = [[1,9,8,5,6,7,4,3,2]
print(nums)
length = len(nums)
count_swap = 0
count = 0
for i in range(length):
for j in range(length-i-1):
count += 1
if nums[j] > nums[j+1]:
tmp = nums[j]
nums[j] = nums[j+1]
nums[j+1] = tmp
count_swap += 1
print(nums,count_swap,count)
時間複雜度:O(n²)
插入排序
插入排序是默認當前的序列有序,將新元素插入到應該在的位置!
def insert_sort(array):
for i in range(len(array)):
for j in range(i):
if array[i] < array[j]:
array.insert(j, array.pop(i))
break
return array
print(insert_sort([4,5,2,6,8]))
時間複雜度:O(n²)
選擇排序
選擇排序的原理比較簡單,首先它是將第一個元素和剩下的元素進行逐個比較,把最小的元素交換到最前面的位置,接下來再把第二個元素和第三個到最後一個比較,找出第二小的元素放到第二個位置,以此類推!
def select_sort(array):
for i in range(len(array)):
x = i # min index
for j in range(i, len(array)):
if array[j] < array[x]:
x = j
array[i], array[x] = array[x], array[i]
return array
print(select_sort([4,5,2,6,8]))
時間複雜度:O(n²)
快速排序
快速排序的原理就是設置2個標杆,將序列一分爲二,一個從前往後遍歷,一個從後到前遍歷,將二者進行比較,當左側的數據大於右側的,數據交換,當比較到最後一個共同的數據時,遍歷結束!此時,左側標杆的數據都小於右側的,再對左右2個標杆的數據進行遞歸得出序列!
def quick_sort(array):
def recursive(begin, end):
if begin > end:
return
l, r = begin, end
pivot = array[l]
while l < r:
while l < r and array[r] > pivot:
r -= 1
while l < r and array[l] <= pivot:
l += 1
array[l], array[r] = array[r], array[l]
array[l], array[begin] = pivot, array[l]
recursive(begin, l - 1)
recursive(r + 1, end)
recursive(0, len(array) - 1)
return array
print(quick_sort([4,5,2,6,8]))
時間複雜度:O(nlog₂n)
楊輝三角
楊輝三角定義圖
triangle = []
n = 6
for i in range(0,n):
if i == 0:
triangle.append(1)
print(triangle)
else:
pre = triangle[i - 1]
cur = [1]
for j in range(0,i - 1):
if j == None:
break
else:
cur.append(pre[j] + pre[j+1])
cur.append(1)
triangle.append(cur)
print(cur)
print(triangle) //楊輝三角