Python基本排序算法示例(一)--冒泡排序、选择排序

冒泡排序

基本思想

冒泡排序的基本思想是依次遍历每个元素,与其相邻元素进行对比,不满足排序条件则相互调换位置,直到没有元素可以交换停止。

为了更好的处理所有排序,我们定义一个排序类,在类中实现各种排序。以下所有案例均实现列表元素的生序排列。

代码实现

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值