零基础学python 15 经典算法:冒泡排序法(课后习题答案)

avatar 2017年5月4日20:24:21 评论 1,403

这节课我们对于冒泡排序法的课后习题进行一下解答:

回顾一下我们的题目:

上节课我们学习的冒泡排序法,是让我们的list从小到大进行排列,这次我们的任务是,请对冒泡排序法进行一定的修改,加一个参数,让它能够按照我们的定义需要进行从大到小或者从小到大的排序。返回这个排序后的list。

下面是我们需要实现的一些例子,从例子中你可以了解到第二个参数的一些定义规则。假定输入的参数没有错误等问题。

函数调用命令 返回值
bubbleSort([37,87,12,3,0],1) [0, 3, 12, 37, 87]
bubbleSort([7,8,123,33,1],2) [123, 33, 8, 7, 1]
bubbleSort([3411,5,32,57,521],1) [5, 32, 57, 521, 3411]

解析:

这道题很神奇让我们比之前多加了一个参数,使得我们可以通过参数来控制返回的list是从大到小还是从小到大排列。我们可以从要实现的例子中发现丝丝端倪,那就是第二个参数如果是1的时候,返回的list就会从小到大排列,如果是2,就会从大到小排列,明白这一点之后,新定义的参数就很容易弄出来了。

我们需要对新定义的参数进行判断,是1则在判断前一个数大于后一个数的时候才交换位置,是2则在判断前一个数小于后一个数的时候才进行交换。

以下是最后的参考代码:

def bubbleSort(nums, k):
    # 请修改代码成题目要求的样子
    for i in range(len(nums)-1):    # 这个循环负责设置冒泡排序进行的次数
        for j in range(len(nums)-i-1):  # j为列表下标
            if k == 1:
                if nums[j] > nums[j+1]:
                    nums[j], nums[j+1] = nums[j+1], nums[j]
            elif k == 2:
                if nums[j] < nums[j+1]:
                    nums[j], nums[j+1] = nums[j+1], nums[j]
    return nums

# 测试代码
print("testing bubbleSort for ([37,87,12,3,0],1) result:" + str(bubbleSort([37,87,12,3,0],1)))
print("testing bubbleSort for ([7,8,123,33,1],2) result:" + str(bubbleSort([7,8,123,33,1],2)))
print("testing bubbleSort for ([3411,5,32,57,521],1) result:" + str(bubbleSort([3411,5,32,57,521],1)))

 

 

以下是我们的视频教程:

在线观看:

 

高清源文件下载:

内容已经隐藏,请注册为本站会员后查看

 

 

感谢大家的收看,我们下期再见!

avatar

发表评论

您必须才能发表评论!