地主要平均分地--快速排序

D&C的重要算法之一–快排
快速排序使用分而治之的策略
分而治之divide and conquer
快速排序是一种排序算法,他的速度要优于选择排序,而且是优雅代码典范之一

经典的一个问题是在1680M*640M的土地上,均匀分成方块。且分出的方块要尽可能的大
适用于这小块地的最大方块,也是适用于整块地的最大方块
欧几里得算法,待研究一下
https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/the-euclidean-algorithm

D&C的工作原理
1.找出基线条件
2.确定如何缩小问题的规模,使其符合基线条件

1、求和数组的和,使用递归

def AddArray(nums):
    if nums==[ ]:
        return 0
    return nums[0] + AddArray(nums[1:])

print(AddArray([1,3,5]))

结果:

9

2、找出数组中最大的数

def BigNumber(nums):
    if len(nums)== 2:
	    return nums[0] if nums[0]>nums[1] else nums[1]
	sub_max = BigNumber(nums[1:])
	return nums[0] if nums[0] > sub_max else sub_max
	
print(BigNumber([3,2,9,1,1]))	

结果:

9

3、快排的工作原理
1.首先选择一个元素为基准值pivot
2.找出比基准值小的元素和比基准值大的元素,这个可以叫做分区。
–>所有小于基准值的数字组成的子数组,无序的
–>基准值
–>一个由所有大于基准值的数字组成的子数组,无序的
如果子数组是有序的,直接把数组相加结果为有序数组
3.对两个子数组进行快速排序

def quicksort(arr):
    if len(arr) < 2:
        return arr
    else:
        pivot = arr[0]
        less = [i for i in arr[1:] if i <= pivot]
        great = [i for i in arr[1:] if i > pivot]
        return quicksort(less) + [pivot] + quicksort(great)

print(quicksort([3,1,9,5,3]))

结果如下:

[1, 3, 3, 5, 9]

生命不息,学习不止,欢迎大佬们随时分享和给与建议

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值