排序算法的学习

冒泡排序:是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。最好的情况下 ,时间复杂度是n 最会的情况下 时间复杂度是n^2

def Bubble(list):
    for i in range(len(list))[::-1]:
        for j in range(i):
            if list[j]>list[j+1]:
                list[j],list[j+1] = list[j+1],list[j]
    return list

print Bubble([2,4,1,9,6])

选择排序:就是通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换。
时间复杂度分析:最大的特点是交换移动数据的次数相当少,这样就节约了相应的时间,最终的排序时间是比较与交换的时间的和,因此时间复杂度仍然是n^2。
应该说,尽管与冒泡排序同为n^2,但是选择排序的性能上还是要略优于冒泡排序。
代码实现:

def selectSort(list):
    for i in range(len(list)-1):
        min=i
        for j in range(i+1,len(list)):
            if list[min]>list[j]:
                min=j
        if i!=min:
            list[i],list[min] = list[min],list[i]
    return list

print selectSort([1,4,2,6,3,8])

快速排序:
算法描述:1、先从序列中取出一个数作为基准;
2、将比它大的放在右边,比基准小的放在左边;
3、再对左右区间重复第二步,直到各区间只有一个数为止。
代码实现:

from random import Random
def quikSort(List):
    if len(List)>1:
        qsort(List,0,len(List)-1)

def qsort(List,start,end):
    base=List[start]
    pl=start
    pr=end
    while pl<pr:
        while pl<pr and List[pr]>=base:
            pr-=1
        if pr==pl:
            break
        else:
            List[pl],List[pr]=List[pr],List[pl]
        while pl<pr and List[pl]<=base:
            pl+=1
        if pr==pl:
            break
        else:
            List[pl], List[pr] = List[pr], List[pl]
    if pl-1>start:
        qsort(List,start,pl-1)
    if pr+1<end:
        qsort(List,pr+1,end)

r=Random()
a=[]
for i in range(20):
    a.append(r.randint(0,100))

print a
quikSort(a)
print a

插入排序:

def insertSort(list):
    for i in range(2,len(list)):
        if list[i]<list[i-1]:
            list[0]=list[i];
            j=i-1
            while list[j]>list[0]:
                list[j+1]=list[j]
                j-=1
            list[j+1]=list[0]
    return list

print insertSort([0,1,4,7,8,3,9,2])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值