查找和排序(Py)

来源:互联网 发布:知乎绑定合适的话题 编辑:程序博客网 时间:2024/06/05 07:15

二分查找

数据结构:数组
平均时间复杂度:

O(logn)
PS:这是一个近似值,通常添加常量或加1对效率没有多大影响

# 思考入口:最高点、最低点和value 关系def binary_search(input_array, value):    low = 0    high = len(input_array)-1    while(low<=high):         mid = (low+high)/2        if(input_array[mid]==value):            return mid        elif(input_array[mid]<value):            low = mid+1        else:            high = mid - 1            return -1# 调用test_list = [1,3,9,11,15,19,29]test_val1 = 25test_val2 = 15print binary_search(test_list, test_val1)print binary_search(test_list, test_val2)

递归

重要特点:必须明确递归结束条件,递归次数过多容易造成栈溢出

def get_fib(position):    if position==0 or position==1:        return position    return get_fib(position-1)+get_fib(position-2)# Test casesprint get_fib(9)print get_fib(11)print get_fib(0)

冒泡排序

平均时间复杂度:

O(n2)
PS:一些额外的加减一阶尝试忽略
空间复杂度 :
O(1)

这里写图片描述

归并排序

平均时间复杂度:

O(nlogn)
PS:虽然比冒泡的n2快,但是空间上也有一定的花销,
空间复杂度:
O(n)
PS:非原地排序考虑(是在新的数组副本上排序)

这里写图片描述

快速排序

快速排序时对冒泡排序的一种改进
时间复杂度:

O(nlogn)

空间复杂度:
O(1)

def sub_sort(array,low,high):    key = array[low]    while low < high:        while low < high and array[high] >= key:            high -= 1        while low < high and array[high] < key:            array[low] = array[high]            low += 1            array[high] = array[low]    array[low] = key    return lowdef quick_sort1(array,low,high):    if low < high:        key_index = sub_sort(array,low,high)        quick_sort1(array,low,key_index)        quick_sort1(array,key_index+1,high)if __name__ == '__main__':    #array = [8,10,9,6,4,16,5,13,26,18,2,45,34,23,1,7,3]    array1 = [7,3,5,6,2,4,1]    print array1    quick_sort1(array1,0,len(array1)-1)    print array1