冒泡排序
基本思想
冒泡排序的基本思想是依次遍历每个元素,与其相邻元素进行对比,不满足排序条件则相互调换位置,直到没有元素可以交换停止。
为了更好的处理所有排序,我们定义一个排序类,在类中实现各种排序。以下所有案例均实现列表元素的生序排列。
代码实现
class Sort:
def __init__(self,list_):
# 初始化中包含一个列表,用于接收传入的元素列。
self.list = list_
#冒泡排序
def bubble(self):
# 外层循环表示比较多少轮
for i in range(len(self.list_) - 1):
# 内层循环表示每轮比较的次数
for j in range(len(self.list_)- i - 1):
# 前一个数比后一个数大则交换位置
if self.list_[j] > self.list_[j + 1]:
self.list_[j], self.list_[j + 1] = \
self.list_[j + 1], self.list_[j]
选择排序
基本思想
对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。然后找到数组中第二小的数,让他跟数组中第二个元素交换一下值,以此类推。(via@百度百科[1],个人认为这是最通俗易懂的理解,比我自己组织的语言要好得多。)
代码实现
# 选择排序
def select(self):
# 比较多少轮
for i in range(len(self.list_) - 1):
min = i # 假定i号位置数字最小
for j in range(i + 1, len(self.list_)):
if self.list_[min] > self.list_[j]:
min = j
# 当i ≠ min时,交换对应位置元素
if i != min:
self.list_[i], self.list_[min] = \
self.list_[min], self.list_[i]
测试代码
您可以复制下方所有代码用于您的测试:
class Sort:
def __init__(self,list_):
# 初始化中包含一个列表,用于接收传入的元素列。
self.list = list_
#冒泡排序
def bubble(self):
# 外层循环表示比较多少轮
for i in range(len(self.list_) - 1):
# 内层循环表示每轮比较的次数
for j in range(len(self.list_)- i - 1):
# 前一个数比后一个数大则交换位置
if self.list_[j] > self.list_[j + 1]:
self.list_[j], self.list_[j + 1] = \
self.list_[j + 1], self.list_[j]
# 选择排序
def select(self):
# 比较多少轮
for i in range(len(self.list_) - 1):
min = i # 假定i号位置数字最小
for j in range(i + 1, len(self.list_)):
if self.list_[min] > self.list_[j]:
min = j
# 当i ≠ min时,交换对应位置元素
if i != min:
self.list_[i], self.list_[min] = \
self.list_[min], self.list_[i]
if __name__ == "__main__":
l = [4, 1, 2, 6, 7, 3, 9, 8, 6, 2]
sr = Sort(l)
sr.bubble()
sr.select()
print(sr.list_)
参考:
[1]:https://baike.baidu.com/item/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F