算法学习

各种排序算法的Python实现

  1.冒泡算法 :

  冒泡排序可以把排序的变化过程想象成气泡从水中升起一样,非常的富有美感。谁有程序员没有审美的?    
        上面我们通过拿第一个数跟后面的依次比较,最后得出了最小数。如果我们用同样的方法从剩余的数组中拿出第二小的数,拿出第三小的数,这样我们不就完成了数组的排序么?理一下思路,我们需要两层循环。

  

'''
冒泡排序
'''

def bubble_sort(sort_list):
    iter_len = len(sort_list)
    if iter_len < 2:
        return sort_list
    for i in range(iter_len-1):
        for j in range(iter_len-i-1):
            if sort_list[j] > sort_list[j+1]:
                sort_list[j],sort_list[j+1] = sort_list[j+1],sort_list[j]
    return sort_list
sort_list = [1,5,6,8,9,2,4]
print(bubble_sort(sort_list))

#[1, 2, 4, 5, 6, 8, 9]

  2.插入排序:

    在玩扑克的时候我们通常会选择把抽到的牌插入到合适的位置,这样就可以保证在抽牌结束之后我们手中的牌是呈序列显示。借鉴此思路,我们可以拿当前的数与排序好的数组比较,若比已排好的数组中的数值小,则已排的数值后移,继续比较,指到遇到比已拍好的数值小的,则将其放入即可。后续重复进行此操作。

def insertion_sort(sort_list):
    iter_len = len(sort_list)
    if iter_len < 2:
        return sort_list
    for i in range(1, iter_len):
        key = sort_list[i]
        j = i - 1
        while j>=0 and sort_list[j]>key:
            sort_list[j+1] = sort_list[j]
            j =j - 1
        sort_list[j+1] = key
    return sort_list

sort_list = [1,5,6,8,9,2,4,50,7]
print(bubble_sort(sort_list))

#[1, 2, 4, 5, 6, 7, 8, 9, 50]

  3.选择排序

     选择排序跟冒泡排序非常相似,冒泡排序是每次如果比它小就会交换位置,而选择排序不会马上交换位置,而是将比它小的数字的位置保存下来,直到循环结束后才交换位置。

def selection_sort(sort_list):
    iter_len = len(sort_list)
    if iter_len < 2:
        return sort_list
    for i in range(len(sort_list)-1):
        smallest = sort_list[i]
        location = i
        for j in range(i,iter_len):
            if sort_list[j] < smallest:
                smallest = sort_list[j]
                location = j
        if i != location:
            sort_list[i],sort_list[location] = sort_list[location],sort_list[i]
    return sort_list

sort_list = [1,5,6,8,9,2,4,50,7,504,551,1226]
print(bubble_sort(sort_list))

#[1, 2, 4, 5, 6, 7, 8, 9, 50, 504, 551, 1226]

  

原文地址:https://www.cnblogs.com/wdz1226/p/10543849.html