美文网首页
冒泡排序

冒泡排序

作者: MapleLuv | 来源:发表于2018-09-10 20:04 被阅读0次

    题目:对给定一个数组进行排序。

    思想:比较两个相邻元素,如果它们的顺序错误,就把它们交换位置。

    原理: 每一趟只能将一个数归位, 如果有n个数进行排序,只需将n-1个数归位, 也就是说要进行n-1趟操作(已经归位的数不用再比较)

    缺点: 冒泡排序解决了桶排序浪费空间的问题, 但是冒泡排序的效率特别低

    时间复杂度:O(n^2)

    实现:

    """
    冒泡排序
    """
    def bubbleSort(nums):
        for i in range(len(nums)-1):    # 这个循环负责设置冒泡排序进行的次数
            for j in range(len(nums)-i-1):  # j为列表下标
                print(nums, 
                      "i={}/{}".format(i, len(nums)-1), 
                      "j={}/{}".format(j, len(nums)-i-1), 
                      "比较:", nums[j], nums[j+1])
                if nums[j] > nums[j+1]:
                    nums[j], nums[j+1] = nums[j+1], nums[j]
        return nums
    
    nums = [5,2,45,6,8,2,1]
    print(bubbleSort(nums))
    
    [5, 2, 45, 6, 8, 2, 1] i=0/6 j=0/6 比较: 5 2
    [2, 5, 45, 6, 8, 2, 1] i=0/6 j=1/6 比较: 5 45
    [2, 5, 45, 6, 8, 2, 1] i=0/6 j=2/6 比较: 45 6
    [2, 5, 6, 45, 8, 2, 1] i=0/6 j=3/6 比较: 45 8
    [2, 5, 6, 8, 45, 2, 1] i=0/6 j=4/6 比较: 45 2
    [2, 5, 6, 8, 2, 45, 1] i=0/6 j=5/6 比较: 45 1
    [2, 5, 6, 8, 2, 1, 45] i=1/6 j=0/5 比较: 2 5
    [2, 5, 6, 8, 2, 1, 45] i=1/6 j=1/5 比较: 5 6
    [2, 5, 6, 8, 2, 1, 45] i=1/6 j=2/5 比较: 6 8
    [2, 5, 6, 8, 2, 1, 45] i=1/6 j=3/5 比较: 8 2
    [2, 5, 6, 2, 8, 1, 45] i=1/6 j=4/5 比较: 8 1
    [2, 5, 6, 2, 1, 8, 45] i=2/6 j=0/4 比较: 2 5
    [2, 5, 6, 2, 1, 8, 45] i=2/6 j=1/4 比较: 5 6
    [2, 5, 6, 2, 1, 8, 45] i=2/6 j=2/4 比较: 6 2
    [2, 5, 2, 6, 1, 8, 45] i=2/6 j=3/4 比较: 6 1
    [2, 5, 2, 1, 6, 8, 45] i=3/6 j=0/3 比较: 2 5
    [2, 5, 2, 1, 6, 8, 45] i=3/6 j=1/3 比较: 5 2
    [2, 2, 5, 1, 6, 8, 45] i=3/6 j=2/3 比较: 5 1
    [2, 2, 1, 5, 6, 8, 45] i=4/6 j=0/2 比较: 2 2
    [2, 2, 1, 5, 6, 8, 45] i=4/6 j=1/2 比较: 2 1
    [2, 1, 2, 5, 6, 8, 45] i=5/6 j=0/1 比较: 2 1
    [1, 2, 2, 5, 6, 8, 45]
    

    相关文章

      网友评论

          本文标题:冒泡排序

          本文链接:https://www.haomeiwen.com/subject/vplegftx.html