冒泡排序(python)
一、冒泡排序的原理
1. 比较相邻的两个元素。如果第一个比第二个大则交换他们的位置(升序排列,降序则反过来)。
2. 从列表的开始一直到结尾,依次对每一对相邻元素都进行比较。这样,值最大的元素就通过交换“冒泡”到了列表的结尾,完成第一轮“冒泡”。
3. 重复上一步,继续从列表开头依次对相邻元素进行比较。已经“冒泡”出来的元素不用比较(一直比较到结尾也可以,已经“冒泡”到后面的元素即使比较也不需要交换,不比较可以减少步骤)。
4. 继续从列表开始进行比较,每轮比较会有一个元素“冒泡”成功。每轮需要比较的元素个数会递减,一直到只剩一个元素没有“冒泡”时(没有任何一对元素需要比较),则列表排序完成。
二、代码
1、思路
将上述的原理用python进行翻译,i 表示第几轮“冒泡”,j 表示“走访”到的元素索引。每一轮“冒泡”中,j 需要从列表开头“走访”到 len(array) - i 的位置
array[j] > array[j+1] 表示将前一个元素同后一个元素比较(相邻两元素),array[j], array[j+1] = array[j+1], array[j]表示左右置换
2、代码
# coding=utf-8
#!/usr/bin/python
def bubble_sort(array):
for i in range(1, len(array)):
for j in range(0, len(array)-i):
if array[j] > array[j+1]:
array[j], array[j+1] = array[j+1], array[j]
return array
if __name__ == '__main__':
array = [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
print(bubble_sort(array))
注解:
1、return的用法作用:
return语句用于退出函数,终止函数并将函数作用后的结果return值传回
2、if判断结构
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
3、for循环结构
forin :
4、数组和列表list的区别
array = [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
list = [1, 2, 3, 4, 5 ]
- 1. 列表list与数组array的定义:
列表是由一系列按特定顺序排列的元素组成,可以将任何东西加入列表中,其中的元素之间没有任何关系;
Python中的列表(list)用于顺序存储结构。它可以方便、高效的的添加删除元素,并且列表中的元素可以是多种类型。
数组也就是一个同一类型的数据的有限集合。
- 2. 列表list与数组array的相同点:
a. 都可以根据索引来取其中的元素;
- 3. 列表list与数组array的不同点:
a.列表list中的元素的数据类型可以不一样。数组array里的元素的数据类型必须一样;
b.列表list不可以进行数学四则运算,数组array可以进行数学四则运算;
c.相对于array,列表会使用更多的存储空间;
d.list是python内置的数据类型。
去掉 if __name__ == '__main__'部分的判断,如下:
#!/usr/bin/python
def bubble_sort(array):
for i in range(1, len(array)):
for j in range(0, len(array)-i):
if array[j] > array[j+1]:
array[j], array[j+1] = array[j+1], array[j]
return array
array = [100,10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
print(bubble_sort(array))
print(__name__)
3、__name__ == '__main__'的理解
#!/usr/bin/python
def bubble_sort(array):
for i in range(1, len(array)):
for j in range(0, len(array)-i):
if array[j] > array[j+1]:
array[j], array[j+1] = array[j+1], array[j]
return array
#if __name__ == '__main__':
array = [100,10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
print(len(array))
print(bubble_sort(array))
print(__name__)
运行结果
13 [5, 7, 10, 15, 17, 21, 24, 27, 30, 36, 45, 50, 100] __main__
可以看到,当前运行的程序,其 __name__ 的值为 __main__。
__name__为Python 内置的系统变量,它用于标识所在模块的模块名。在没有导入外部模块时,__name__默认值为__main__。
而导入到当前程序中的模块,其 __name__ 值为自己的模块名。
因此,if __name__ == '__main__': 的作用是确保只有单独运行该模块时,此表达式才成立,才可以进入此判断语法,执行其中的测试代码;反之,如果只是作为模块导入到其他程序文件中,则此表达式将不成立,运行其它程序时,也就不会执行该判断语句中的测试代码。