各种排序算法的分析与比较

内部排序算法

直接插入排序:每次取一个记录插入到已经排好序的有序表中,得到一个新的有序表。在插入过程中为了防止下标出界,需要在r[0]处加入一个监视哨。该算法的时间复杂度为O(n^{2}),双层嵌套循环;空间复杂度为O(1),因为只需要一个额外的空间存储监视哨。

def insertSort(L):
    L.insert(0,0)   #插入监视哨,c初值为0
    for i in range(2,len(L)):      #第一个元素为有序,所以直接从第二个元素开始比较
        if L[i]

实验结果:

为了方便以后可以更快的熟悉算法思想,添加一个实例:

图片来源:https://www.cnblogs.com/chengxiao/p/6103002.html

希尔排序:希尔排序是由直接插入排序发展而来,将待排序列分割成若干个子序列,并分别进行直接插入排序,(子序列是由相隔某个增量的记录组成的,而非分段),最后进行一次直接插入排序。注意:增量序列的值应该没有除1以外的公因子,且最后一个增量值必须为1.该算法的时间复杂度小于O(n^{2}),与选取的增量值相关。

def shellInsert(L,dk):    #一次排序
    for i in range(dk+1,len(L)):
        if L[i]0 and L[0]

实验结果:

输出每次排序后的结果以及最终排序结果

实例:

各种排序算法的分析与比较_第1张图片

图片来源:https://www.cnblogs.com/chengxiao/p/6104371.html

冒泡排序:每一轮排序都从第一位开始将相邻的两位进行比较,如果t-1位比t位的值大,则将其交换顺序。每轮排序后,都会将未排序序列的最大数移到最后一位。当开始时序列即为从小到大有序序列,只需要一次就可以完成排序,时间复杂度为O(n); 当序列为逆序排列时,所需排序次数为n-1次,每次比较的次数为n-i次,时间复杂度为O(n^{2});算法的平均时间复杂度为O(n^{2})

def bubbleSort(L):
    for i in range(len(L)-1):
        flag=0   #判断序列是否发生变化
        for j in range(len(L)-i-1):
            if L[j]>L[j+1]:
                L[j],L[j+1]=L[j+1],L[j]
                flag=1
        print(L)
        if flag==0:
            break

运行结果:

各种排序算法的分析与比较_第2张图片

实例介绍:

各种排序算法的分析与比较_第3张图片

快速排序:第一趟快排将列表分为两部分,一部分的关键字均比另一部分关键字小,然后再分别对两部分进行排序。算法首先选定一点作为枢纽,然后分别设置两个指针low和high,high从尾部开始,找到小于枢纽的点,将其与枢纽交换;然后low从头部开始找到大于枢纽的点将其与枢纽交换。依次排序后以枢纽为中心分为两部分,且左边均比枢纽小,右边均比枢纽大。快速排序的平均时间复杂度为所有内部排序中最优的,但是在序列有序的情况下,其性能不能达到O(n)。空间复杂度为O(logn),因为每次快排包括递归过程中的枢纽值,都需要存储在一个栈中。(疑问:我觉得空间复杂度为O(1),因为在母串快排结束后,才开始子串的快排,且两个子串是顺序进行的,所以只需要一个空间存储枢纽值,就可以了。这样理解有什么问题呢?)

def Qsort(L,low,high):
    Low,High=low,high
    pivot=L[low]
    while (lowpivot and high>low:
            high-=1
        if high>low:
            L[low]=L[high]
            low+=1
        while L[low]low:
            low+=1
        if high>low:
            L[high]=L[low]
            high-=1
    L[low]=pivot
    if Lowlow+1:
        Qsort(L,low+1,High)

def quickSort(L):
    Qsort(L,0,len(L)-1)
    print(L)

运行结果:

实例:

è¿éåå¾çæè¿°

图片来源:https://blog.csdn.net/qq_36528114/article/details/78667034

 

你可能感兴趣的:(数据结构)