• 算法学习


    各种排序算法的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]

      

  • 相关阅读:
    c++ 对象大小内存占用分析
    运维(SA)修仙 之路 II
    分享好文章-Ansible 进阶技巧
    java JWT 登录认证
    ftp:500 OOPS: chroot
    centos 磁盘清理
    redis分析命令
    linux查找内容
    vim使用
    查看进程端口
  • 原文地址:https://www.cnblogs.com/wdz1226/p/10543849.html
Copyright © 2020-2023  润新知