python实现排序算法 整理

1. 冒泡排序
冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。

步骤:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

代码实现:

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

a=[3,15,7,2,9]
print(maopao_sort(a))

运行结果:
[2, 3, 7, 9, 15]
2.选择排序(Selection Sort)
原理:首先从未排序的数组中,找出最小(最大)的数,放在数组的第一个位置,然后再从剩余的元素中取出最小(最大)的数,放在剩余元素的第一个位置,依次类推,直到所有的元素排完。
用两种方法实现,代码如下:

def select_sort(list):
    length=len(list)
    for index in range(length):
        for i in range(index,length):
            if list[index]>list[i]:
                list[index],list[i]=list[i],list[index]
    return list

list=[20,7,5,8,1]
print(select_sort(list))
def select_sort(array):
    for i in range(len(array)):
        num = i   #存索引位置
        for j in range(i,len(array)-1):
            if array[j]>array[j+1]:
                num=j+1
        [array[i],array[num]]=[array[num],array[i]]
    return array

a=[20,7,5,8,1,100]
print(select_sort(a))

3. 插入排序(Insertion Sort)
原理:假设第一个元素是已排序好的,取下一个元素,跟前面已经排序好的进行比较,若大于已排序好的,则交换,依次类推,直到所有元素排好。

def insertion_sort(array):
    for i in range(len(array)-1):
        for j in range(i+1,0,-1): #降序
            if array[j]<array[j-1]:
                array[j-1],array[j]=array[j],array[j-1] #交换
    return array


"""调用函数检验"""
a=[20,7,5,8,1,100]
print(insertion_sort(a))

4. 希尔排序(Shell Sort)
原理:希尔排序的实质就是分组插入排序,该方法又称缩小增量排序
基本思想是:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2(d2小于d1),重复上述的分组和排序;依次取d3、d4、…..直至取到dt=1为止,即所有记录放在同一组中进行直接插入排序。
代码实现:

def shell_sort(array):
    step = int(len(array)/2)
    while step > 0:
        for i in range(step,len(array)):
            while(i >= step and array[i] < array[i-step]):
                array[i],array[i-step] = array[i-step],array[i]
                i -= step
        step=int(step/2)
    return array

a=[5,2,7,1,3]
print(shell_sort(a))

5.归并排序
后续会更新。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值