Python的排序算法

要求:将数组中元素按照从小到大对列表,进行排序

一、冒泡排序

这里写图片描述

bubble_list=[4,213,5,6,12,123,45,66,43]
def bubble(array):
    for i in range(len(array)-1):   ##外循环,每次循环找出最大值放在最右边,下一次则忽略前面循环找出的数
        for j in range(len(array)-1-i):  ##内循环,和下一个数比较,若第一个数较大,则进行交换
            if array[j]>array[j+1]:
                tmp=array[j]
                array[j]=array[j+1]
                array[j+1]=tmp
bubble(bubble_list)
print "Final:%s" % bubble_list
Final:[4, 5, 6, 12, 43, 45, 66, 123, 213]
二、选择排序

这里写图片描述

select_list=[25,213,5,6,12,123,45,66,43]
def select(array):
    for i in range(len(array)-1):   ##从第一个数开始依次与后面的数对比,若有数比数组中第一个小,则进行交换。循环len(array)-1次。
        for j in range(i+1,len(array)):
            if array[i]>array[j]:
                tmp=array[i]
                array[i]=array[j]
                array[j]=tmp
select(select_list)
print "Final:%s" % select_list

这样的选择排序有一个弊端,i每次循环,都可能有很多数据交换过程,因此,怎样解决这样的问题呢?
只需要引入一个变量,least_index每次判断大小后,只需要把数值更小的下标赋值给least_index即可。

select_list=[25,213,5,6,12,123,45,66,43]
def select_plus(array):
    for i in range(len(array)-1):
        least_index=i
        for j in range(i+1,len(array)):
            if array[least_index]>array[j]:
                least_index=j
        tmp=array[i]
        array[i]=array[least_index]
        array[least_index]=tmp
select_plus(select_list)
print "Final:%s" % select_list
三、插入排序

这里写图片描述

insert_list=[25,213,5,6,12,123,45,66,43]
def insert(array):
    for i in range(1,len(array)):  #从数组中第二个数与与左边的数进行对比
        position=i
        current_var=array[position]  ##保留array[i]中的值
        while array[position-1]>current_var and position>0:            ##当左边的数大于插入数,则将两数进行交换,直到数组进行到数组首位
            array[position]=array[position-1]
            array[position-1]=current_var
            position-=1
insert(insert_list)
print "Final:%s" % insert_list
Final:[5, 6, 12, 25, 43, 45, 66, 123, 213]
四、快速排序

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

"""                                           
quick_list = [69, 471, 106, 66, 149, 983, 160]

def quickSort(L, low, high):                  
    i = low                                   
    j = high                                  
    if i >= j:                                
        return L                              
    key = L[i]                                
    while i < j:                              
        while i < j and L[j] >= key:          
            j = j-1                           
        L[i] = L[j]                           
        while i < j and L[i] <= key:          
            i = i+1                           
        L[j] = L[i]                           
    L[i] = key                                
    quickSort(L, low, i-1)                    
    quickSort(L, j+1, high)                   
    return                                    
quickSort(quick_list,0,len(quick_list)-1)     
print quick_list                              
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值