Python实现冒泡排序(2.0)

引入

在 Python 中,有很多排序的方法:有直接用 sortsorted 函数排序;有 快速排序;有 选择排序;有 插入排序;有 归并排序 等等。当然,冒泡排序 ,也少不了,它应该是其中比较基础的了。

在 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,Ni1) 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)

运行结果2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值