冒泡排序、选择排序、快速排序、插入排序

冒泡排序

排序只对一维数据有意义.
两层循环, 第一层是遍历每一个元素.
第二层循环,让两两之间进行比较交换.
时间复杂度: 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
上一篇:Word模板中的语法(Jinja2)


下一篇:分布式任务管理系统 Celery 之一