排序算法

折半查找

def bisearch(a,x,low,high):
    while low<=high:
        mid=(low+high)//2
        print('当前mid值:',mid)
        if a[mid]==x:
            return mid
        elif a[mid]<x:
            low=mid+1
        else:
            high=mid-1
    return 0

复杂度分析:
设查找次数为k
要查找的数组长度为:n,n/2,n/4,n/2k..直到n/2k等于1,此时解出k=log2n
时间复杂度为O(n)=log2n
**大O表示法:‘长远主流’

选择排序

version1:出错的版本

def choose_sort(arr):
    for i in range(len(arr)):
        temp=arr[i]
        k=i
        for j in range(i+1,len(arr)):
            if temp>arr[j]:
                temp=arr[j]
                k=j
        if arr[i]<temp:#由于temp的有效范围,此时的temp为外层for下面的temp,并非在内层for中修改后的temp,所以这个算法在c中是对的,在python中要修改
            temp=arr[i]
            arr[i]=arr[k]
            arr[k]=temp

version2:改进部分:每一次比较都做一次交换,使得arr[smallest]保持为最小的值

def choose_sort2(arr):
    for i in range(len(arr)):
        smallest=i#保存最小值的坐标
        for j in range(i+1,len(arr)):
            if arr[smallest]>arr[j]:
                temp=arr[smallest]
                arr[smallest]=arr[j]
                arr[j]=temp
1 2 3 4 5 6

快速排序(分治思想)

分区函数

def partion(arr,low,high):
    i,j=low,high
    temp=arr[i]#取第一个数为基准值
    while i<j:#当i==j时,说明此时已经找到了基于基准值的分解点。
        while arr[j]>temp & i<j:
            j-=1
        if i>=j:#此处为第一次纠错点
            break
        arr[i]=arr[j]
        i+=1
        while (arr[i]<temp) & (i<j):#代码纠错:原因是&运算符的优先级过高。
            i+=1
        if i>=j:
            break
        arr[j]=arr[i]
        j-=1
    arr[i]=temp
    return i
def quicksort(arr,low,high):
    if low<high:
        x=partion(arr,low,high)
        quicksort(arr,low,x-1)
        quicksort(arr,x+1,high)

关于一个算法的运行时间,通常考量两点:
1,大O表示法的时间复杂度
2,基本操作的时间常量C

对于O(n)相同的两种算法,再考量时间常量C
比如归并算法和快速排序算法。平均时间复杂度都是O(nlog2n),但快速排序的时间常量C要小得多,因此快速排序大多数情况下更快。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 该系列文章主要是记录下自己暑假这段时间的学习笔记,暑期也在实习,抽空学了很多,每个方面的知识我都会另起一篇博客去记...
    Yanci516阅读 14,245评论 6 19
  • 排序算法基础 排序算法,是一种能将一串数据按照特定的排序方式进行排列的一种算法,一个排序算法的好坏,主要从时间复杂...
    jackyshan阅读 9,639评论 3 11
  • 今天分享的是时间复杂度、空间复杂度相关内容,可以简单了解下复杂度相关的知识。 复杂度:复杂度描述的是算法执行时间或...
    Java耕耘者阅读 6,397评论 0 2
  • 我一直觉得写代码也可以写出艺术,在不懂画的人的眼里,《向日葵》不过是小孩子的涂鸦,在懂代码的人眼里,那看似混乱的字...
    AidenRao阅读 9,593评论 9 59
  • 昨天,家人从麦当劳带了薯条和番茄酱回来,昨晚太晚,没去妈妈家。今早下去才看到,看着看着,让我想起了一段话。 一...
    Nadirou阅读 2,241评论 0 0

友情链接更多精彩内容