冒泡排序
排序只对一维数据有意义.
两层循环, 第一层是遍历每一个元素.
第二层循环,让两两之间进行比较交换.
时间复杂度: O(n^2)
空间复杂度: O(1)
稳定性: 稳定的
def buble_sort(arr):
for i in range(len(arr)-1):
for j in range(len(arr)-i-1):
if arr[j]>arr[j+1]:
arr[j],arr[j+1]=arr[j+1],arr[j]
return arr
选择排序
选择后面的最小的和当前的元素进行对比
时间复杂度: O(n^2)
空间复杂度: O(1)
稳定性: 不稳定
def select_sort(arr):
for i in range(len(arr)-1):
index = i
for j in range(i+1,len(arr)):
if arr[j] > arr[index]:
index = j
arr[i],arr[index] = arr[index],arr[i]
return arr
快速排序
思路: 选择一个基准值, 然后比它小的放到一个数组中, 比它大的放到另一个数组中, 递归这个操作.
时间复杂度: O(nlog2(n))
空间复杂度: O(nlog2(n))
稳定性: 不稳定的.
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr.pop()
big = []
small = []
for i in range(len(arr)):
if arr[i]>pivot:
big.append(arr[i])
else:
small.append(arr[i])
return quick_sort(small) + [pivot] + quick_sort(big)
插入排序
认为第一个已经排好序, 从后面依次循环选择元素和排好序的元素做对比,找到合适的位置,插入.
时间复杂度: O(n^2)
空间复杂度: O(1)
稳定性: 稳定的
# 插入排序
# 认为第一个已经排好序, 从后面依次循环选择元素和排好序的元素做对比,找到合适的位置,插入.
# 时间复杂度: O(n^2)
# 空间复杂度: O(1)
# 稳定性: 稳定的
def insert_sort(arr):
for i in range(1, len(arr)):
loop_index = i
while loop_index > 0 and arr[loop_index] < arr[loop_index - 1]:
arr[loop_index], arr[loop_index -1] = arr[loop_index - 1], arr[loop_index]
loop_index -= 1
return arr