Python算法入门——第1章 2,冒泡排序

上一篇文章已经说过,桶排序会极大地浪费资源,因此需要用一种更简单的排序方式来完成:冒泡排序。其原理是1.从第一个数字开始,与第二个数进行比较,如果小于第二个数(按从大到小排序),则将其交换数值;2.接着,第二个数与第三个数比较,重复此步骤,直至完成与最后一个数的比较。这样,第一个数就到了它应该呆的地方。但是其他数仍在相对位置没有变动,所以我们仍要重复步骤1,与步骤2.直至所有数字都去到它们该呆的地方,下面是Python代码的实现:

class Solution():
    '''
    冒泡排序
    从大到小排序
    '''
    def MaoPao(self,x):
        #有多少数字,循环多少次
        for i in range(len(x)):
            #依次读取列表x里面的数据,并与下一个数进行比较
            for j in range(len(x)-1):
                #如果小于下一个数,就将两个数交换位置
                if x[j] < x[j+1]:
                    x[j], x[j+1] = x[j+1], x[j]
        return x

if __name__ == "__main__":
    a = Solution()
    print(a.MaoPao([1,2,3,4,5,6,7]))

下面附上《啊哈!算法》的C语言实现:

#include <stdio.h>
int main()
{
    int a[100],i,j,t,n;
    scanf("%d",&n); //输入一个数n,表示接下来有n个数
    for(i=1;i<=n;i++) //循环读入n个数到数组a中
        scanf("%d",&a[i]);//冒泡排序的核心部分
        for(i=1;i<=n-1;i++) //n个数排序,只用进行n-1趟
        {
            for(j=1;j<=n-i;j++) //从第1位开始比较直到最后一个尚未归位的数,想一想为什
            么到n-i就可以了。
            {
                if(a[j]<a[j+1]) //比较大小并交换
                { t=a[j]; a[j]=a[j+1]; a[j+1]=t; }
            }
        }
    for(i=1;i<=n;i++) //输出结果
    printf("%d ",a[i]);
    getchar();getchar();
    return 0;
}

其实Python完全不用这么麻烦,一个sort函数就可以完成排序,而且冒泡排序极大地浪费了时间。 

猜你喜欢

转载自blog.csdn.net/lpp5406813053/article/details/83616203