引入
在 Python 中,有很多排序的方法:有直接用 sort
或 sorted
函数排序;有 快速排序
;有 选择排序
;有 插入排序
;有 归并排序
等等。当然,冒泡排序
,也少不了,它应该是其中比较基础的了。
在 Python 中,冒泡排序是比较常见的,下面就说说冒泡排序的过程:
如: [ 3 , 2 , 4 , 1 , 5 ] [3,2,4,1,5] [3,2,4,1,5] 这个序列要把它升序(从小到大),怎么办?这时我们得了解一下冒泡排序的原理了。
原理
我们可以想到一个方案,既然是从小到大的排序,我们就把一个区间中比较大的值往后推,这样就可以比较简单的排序了。
有想法了,就要开始
设 i i i 为排完好的 i i i 个较大值,设一个要遍历的数 j j j,满足要求: ∀ j ∈ [ 0 , N − i − 1 ) ∀j\in [0,N-i-1) ∀j∈[0,N−i−1), j j j 的意义是:除了选出来的最大数,在剩下的数中继续遍历出一个最大值,继续推到后面。
此时,你肯定有了想法,构成了如下代码:
for i in range(len(s)):
for j in range(len(s)-i-1):
if s[j] > s[j+1] :# 此为判断是否大于后一个数,大于就换(升序判断),如果想是降序,就把">"改成"<"
s[j], s[j+1] = s[j+1], s[j]
但是有些人可能想的是存个最大值,然后放到后面,但是这不是冒泡排序,而且,核心的思想是推到后面,所以只能是这样。
T i p s : Tips: Tips: 这里的 s s s 是列表。
如果有模板题的话,代码如下:
"""
Python冒泡排序
两个for
"""
s = list(map(int,input().split(" ")))# 输入列表,以空格分隔,返回列表。 在此,就可输入:3 2 4 1 5
for i in range(len(s)):
for j in range(len(s)-i-1):
if s[j] > s[j+1] :# 此为判断是否大于后一个数,大于就换(升序判断),如果想是降序,就把">"改成"<"
s[j], s[j+1] = s[j+1], s[j]
for i in s:
print(i,end=" ")# 输出,按之前,输出为:1 2 3 4 5
输入和输出的格式大家可以自己定,我的是这样的:
还有一种用 class
做的,无论升序还是逆序都写了,蒟蒻写的,还请多多指教。
import sys
# 定义类型sort_big,small->big
class sort_big(object):
# 定义self参数
def __init__(self, f):
self.f = f
# 定义sorts函数,完成排序
def sorts(self):
for i in range(0, len(self.f)):
for j in range(0, len(self.f)-i-1):
if self.f[j] > self.f[j+1]:
self.f[j], self.f[j+1] = self.f[j+1], self.f[j]
return f
# 定义类型sort_small,big->small
class sort_small(object):
# 定义self参数
def __init__(self, f):
self.f = f
# 定义sorts函数,完成排序
def sorts(self):
for i in range(0, len(self.f)):
for j in range(0, len(self.f) - i - 1):
if self.f[j] < self.f[j + 1]:
self.f[j], self.f[j + 1] = self.f[j + 1], self.f[j]
return f
f = [int(x) for x in input().split(" ")]
a = f
# 通过调用类函数来进行排序(small->big)
x = sort_big(f)
f = x.sorts()
for i in f:
print(i, end=" ")
print(end='\n') # 换行,方便看清晰
# 通过调用类函数来进行排序(small->big)
y = sort_small(f)
f = y.sorts()
for i in f:
print(i, end=" ")
print(end='\n') # 换行,方便看清晰
# sys.exit()# 停止程序,为防止运行一下程序
a.sort() # 把列表升序
# a = sorted(a) # 把列表升序
# print(a)
a.sort(reverse=True) # 把列表降序
# a = sorted(a, reverse=True) # 把列表降序
# print(a)