排序1(归并、快排、选择)_python

直接进入正题

1.归并排序

归并排序将待排序数组不断地从中间分开直到值剩下两个数再合成左右两个数组,然后比较两个数组位置上的大小,较小的加到一个空数组里面。

def merge_sort(nums):
	if len(nums)<2:
		return
	mid = len(nums) //2
	left = merge_sort(nums[:mid])
	right = merge_sort(nums[mid:])
	return merge(left,right)

def merge(left,right):
	ans = []
	i = 0 
	j = 0
	while i < len(left) and j < len(right):
		if left[i] <= right[i]:
			ans.append(left[i])
			i += 1
		else:
			ans.append(right[j])
			j += 1
	
	ans += left[i:]
	ans += right[j:]
	return ans

2.快速排序
快速排序通过确定一个基准值,大于基准值的放右边,小于的放左边。对两个新数组重复操作直到数组仅有2个或更少元素。

def quick_sort(nums):
    if len(nums) < 2:
        return nums
    mid = nums[0]
    left = []
    right = []
    for i in nums[1:]:
        if i <= mid:
            left.append(i)
        else:
            right.append(i)

    return quick_sort(left) + [mid]+quick_sort(right)	

虽然说基准值使用数组中间位置的数比较容易理解,但是在测试(10个数)的时候发现每次“len(nums)//2"都会浪费一点时间,在len(nums)<2这里超过了最大递归深度,递归深度加到1000000之后出现了栈溢出。
在这里插入图片描述3.选择排序
选择排序是在未排序序列中找到最大或最小的元素,存放到前一个最大或最小元素的后面。

def select_sort(nums):
	arr = []
    for i in range(len(nums)):
        small = min(nums)
        arr.append(nums.pop(nums.index(small)))
    return arr
def findMix(nums):
	s = nums[0]
	s_index = 0
	for i in range(len(nums)):
		if nums[i]<s:
			s = nums[i]
			s_index = i
	return s_index

def select_sort(nums):
	arr = []
    for i in range(len(nums)):
        small = findMix(nums)
        arr.append(nums.pop(small))
    return arr
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值