排序算法的Python实现以及时间分析

本文详细介绍了Python实现的选择排序、插入排序、归并排序、快速排序和堆排序,包括算法原理和时间复杂度分析。通过实验对比,展示了不同排序算法在不同规模数组下的运行时间,验证了时间复杂度的理论结果。完整代码可在GitHub的Sort-Compare项目中查看。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全部代码放在GitHub上:Sort-Compare

 

选择排序

首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。这种方法叫做选择排序,因为它在不断地选择剩余元素之中的最小者。

1. 辅助函数——exchange()

#辅助函数——交换两个数
def exchange(a,i,j):
    temp = a[i]
    a[i] = a[j]
    a[j] = temp

2. 选择排序主函数——selection()

#选择排序函数(无返回值)
def selection(a):
    length = len(a)
    for i in range(length):
        minIndex = i
        for j in range(i+1,length):
            if a[j] < a[minIndex]:
                minIndex = j
        exchange(a,i,minIndex)

 

插入排序

通常人们整理桥牌的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置。在计算机的实现中,为了给要插入的元素腾出空间,我们需要将其余所有元素在插入之前都向右移动一位。这种算法叫做插入排序。

#插入排序函数
def insertion(a):
    length = len(a)
    for i in range(1,length):
        j = i
        while (j>0 and a[j]<a[j-1]):
            exchange(a,j,j-1)
            j -= 1

 

归并排序

归并排序体现的是一种分治思想(Divide and conquer),下面是其排序的步骤:

1)将数组一分为二(Divide array into two halves)

2)对每部分进行递归式地排序(Recursively sort each half)

3)合并两个部分(Merge two halves)

1. merge()函数:

具体步骤如下:

1)给出原数组a[],该数组的low到mid,mid+1到high的子数组是各自有序的。

2)将数组复制到辅助数组(auxiliary array)中,两部分数组的首元素分别以i和j的下标,给原数组首元素以k的下标。

3)比较i下标和j下标的元素,将较小值赋到k下标位置的元素内,然后对k和赋值的下标进行递增。

4)重复上述过程,直到比较完全部元素。

def merge(a,aux,low,mid,high):
    for k in range(low,high+1):
        aux[k] = a[k] #辅助数组
    i = low
    j = mid+1
    for k in range(low,high+1):
        if i > mid:
            a[k] = aux[j]
            j += 1
        elif j > hi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值