python之排序

# 冒泡排序:就是从零位开始,临位比较,较大的放后面
# 第一轮,把最大的排出来了。第二轮,把第二大的排出来了,.......a
a = [3,5,1,0,4,9,2,-1]
for j in range(1,len(a)):
    for i in range(0,len(a)-j):
        if a[i] > a[i+1]:
            a[i],a[i+1]= a[i+1],a[i]

print(a)


# 选择排序:从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。
# 选择排序是一种不稳定的算法,[5 8 5 2 9],中两个相等元素5的顺序乱了,而冒泡排序就不会乱,因此冒泡排序稳定
a = [3,5,1,0,4,9,2,-1]
for i in range(0,len(a)-1):
    for j in range(i+1,len(a)):
        if a[i]>a[j]:
            a[i],a[j] = a[j],a[i]

print(a)

# 插入排序:对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入
# 插入排序需要注意的是:每一个元素跟前一个比较后,如果小于前面的元素,前面的元素加1,前面元素的位置由该元素占据(因此要把当前元素拿出来作为cur)
a = [3,5,1,0,4,9,2,-1]

for i in range(1,len(a)):
    cur = a[i]
    for j in range(i-1,-1,-1):
        if cur>a[j]:
            break
        else:
            a[j+1]= a[j]
            a[j]=cur


print(a)

# 堆排序: 优先队列排序
def heapify(arr,n,i):
    largest = i
    l = 2*i + 1
    r = 2*i + 2
    if l<n and arr[i] < arr[l]:
        largest = l
    if r<n and arr[r] > arr[largest]:
        largest = r
    if largest != i:
        arr[i],arr[largest] = arr[largest], arr[i]
        heapify(arr,n,i)
def heapsort(arr):
    n = len(arr)
    # 要从后往前遍历,不能从前往后遍历,
    # 因为,从前往后遍历,会导致这么一种情况:第一次与第二层下沉好了后,第二层都小于第一层,但是当第二层下沉时候,从第三层上浮到第二层的就
    # 可能比第一层大。
    # 而从后面遍历,就不会出现这种问题
    for i in range(n,-1,-1):
        heapify(arr,n,i)

    for i in range(n-1,0,-1):
        arr[i],arr[0]=arr[0],arr[i]
        heapify(arr,i,0)

a = [3,5,1,0,4,9,2,-1]
heapsort(a)
print(a)

# 希尔排序
a = [3,1,5,4,2,0]
h = len(a)/2

for i in range(0,h):
    if a[i]>a[h+i]:
        a[i],a[h+i] = a[h+i],a[i]
print a

def chr(a):
    for i in range(1,len(a)):
        cur = a[i]
        for j in range(i,-1,-1):
            if cur < a[j]:
                a[j+1] = a[j]
                a[j] = cur
            else:
                pass
    return a

c= chr(a)
print c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值