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

冒泡排序

排序只对一维数据有意义.
两层循环, 第一层是遍历每一个元素.
第二层循环,让两两之间进行比较交换.
时间复杂度: 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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值