快速排序

快速排序是一种分治的排序算法。它将一个数组分成两个子分组,将两部分独立地排序。每次通过递归地调用切分来排序的。

Quick.py

#!-*-coding:utf8-*-

import operator,time,random
start = time.clock()
def quick(arr):
    lo = 0
    hi = len(arr) - 1
    quick_sort(arr,lo,hi)
#快速排序的切分    
def paripation(arr,lo,hi):
    i = lo + 1
    j = hi
    v = arr[lo] #切分元素
    while True:
        #扫描左右,检查扫描是否结束并交换元素
        while(operator.lt(arr[i],v)):
            if(i == hi):
                break
            i += 1
        while(operator.lt(v,arr[j])):
            if(j == lo):
                break
            j -= 1
        if(i >= j):
            break
        exch(arr,i,j)
    exch(arr,lo,j)  #将v = arr[j]放入正确位置
    return j    #达成arr[lo..j-1] <= arr[j] <= arr[j+1..hi]
#快速排序
def quick_sort(arr,lo,hi):
    if(lo >= hi):
        return
    j = paripation(arr,lo,hi)
    quick_sort(arr,lo,j - 1)
    quick_sort(arr,j + 1,hi)
#交换数据
def exch(arr,i,j):
    temp = arr[i]
    arr[i] = arr[j]
    arr[j] = temp

# arr = [n for n in range(0,100)]
#对arr数组进行重洗
# random.shuffle(arr)
arr = ["S","H","E","L","R","A","Z","B","O"]
quick(arr)
print(arr)

elapsed = time.clock() - start
print("Time used: %.5f" % elapsed)

>>>python Quick.py
['A', 'B', 'E', 'H', 'L', 'O', 'R', 'S', 'Z']
Time used: 0.00005
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值