编程语言
首页 > 编程语言> > 《算法图解》第四章 快速排序

《算法图解》第四章 快速排序

作者:互联网

 

 1、分而治之(divide and conquer,D&C)

(1)步骤:①找到简单的基线条件(可能是空数组货只包含一个元素的数组);②不断分解问题/缩小规模,直至符合基线条件。

(2)不是用于解决问题的算法,而是一种解决问题的思路。

(3)原理:将问题逐步分解。

 

2、欧几里得算法:gcd(a,b)=gcd(b,a mod b)

def gcd(a,b):
    while a!=0:
        #a=b%a;b=a
        a,b=b%a,a
    return b

 

3、 快速排序

(1)基准值(pivot)、分区(partitioning)

(2)code medo

def quicksort(array):
    if len(array)<2:
        # 基线条件:为空货只包含一个元素的数组是有序的
          return array
    else:
        # 递归条件
        pivot=array[0]
        print(array[1:])
        # 由所有小于基准值的元素组成的子数组
        less=[i for i in array[1:] if i<=pivot]    
        # 由所有大于基准值的元素组成的子数组
        greater=[i for i in array[1:] if i>pivot]

        return quicksort(less)+[pivot]+quicksort(greater)

print(quicksort([10,5,2,3,4]))    

 (3)实现快速排序的时候,请随机地选择基准值的元素。

 

4、收纳证明步骤:基线条件和归纳条件 

 

5、大O表示法

(1)O(n log n):快速排序在平均情况下运行时间 / 合并排序,快速查找的常量要比合并查找小。

(2)c*n:c为算法所需要的的固定时间量,成为常量。

(3)平均情况(最佳情况):每层时间*层数即调用栈的高度=O(n)*O(log n)=O(n log n)

    最糟糕情况:每层时间*层数即调用栈的高度=O(n)*O(n)=O(n^2)

(4)比较简单查找和二分查找时,常量几乎无关紧要,由于列表很长是,O(log n)的速度比O(n)快得多。但是在比较快速排序于合并排序的时候又是事关紧要的。

 

  

 

 

 

 答案:

4.1 CODE

# 例子1
arr=[2,4,6]
def sum1(arr):
    total=0
    for i in range(0,len(arr)):
        total+=arr[i]
    return total

print(sum1(arr))

# 例子2
def sum2(arr):
    total=0
    for x in arr:
        total+=x
    return total

print(sum2([2,4,6]))

4.2 CODE

arr=[1,2,3,4,5,6]
print(len(arr))
def count(arr):
    if len()

4.3 CODE

def maxArr(arr):
    max=arr[0]
    for i in range(len(arr)):
        if arr[i]>max:
            max=arr[i]
    return max

arr=[-10,-1,-5,-2,-8,-3]
print(maxArr(arr))

 4.4 CODE

def binary_search(list,item):
    low=0
    high=len(list)-1
    # 基线条件
    while low<=high:
        mid=(low+high)//2
        guess=list[mid]
        # 递归条件
        if guess==item:
            return mid
        elif guess>item:
            high=mid-1
        else:
            low=mid+1
    return None

list=[1,2,3,1,5,6]
print(binary_search(list,4))

4.5 O(c*n)

4.6 O(c*n)

4.7 O(1)

4.8 O(c*n^2)

 

标签:total,arr,排序,return,len,第四章,print,图解,def
来源: https://www.cnblogs.com/annuush/p/15353859.html