zoukankan      html  css  js  c++  java
  • 排序算法之冒泡排序


    冒泡法
    1.属于交换排序
    2.两两比较大小,交换位置。如同水泡咕嘟咕嘟往上冒
    3.结果分为升序和降序排列
    升序
    1.n个数从左至右,编号从0开始到n-1,索引0和1的值比较,如果索引0大,则交换两者位置,如 果索引1大,则不交换。继续比较索引1和2的值,将大值放在右侧。直至n-2和n-1比较完,第 一轮比较完成。
    第二轮从索引0比较到n-2,因为最右侧n-1位置上已经是最大值了。依次类推, 每一轮都会减少最右侧的不参与比较,直至剩下最后2个数比较
    降序
    1.和升序相反

    冒泡算法Python实现
    numlist = [1,9,8,5,6,7,4,3,2]
    length = len(numlist)
    for i in range(length):
        for j in range(length-1-i):
            if numlist[j]>numlist[j+1]:
    #            numlist[j],numlist[j+1]=numlist[j+1],numlist[j]
                numlist[j+1], numlist[j] = numlist[j], numlist[j+1]
    print(numlist)

    加上flag标记,冒泡有位置交换,继续下一轮执行,没有位置交换说明位置已经排序好了,利用flag标志判断推出

    nums = [1,9,8,5,6,7,4,3,2]
    length = len(nums)
    # flag = False 在循环外部只启第一次循环的作用
    for i in range(length):
        flag = False
        for j in range(length-i-1):
            if nums[j]>nums[j+1]:
                nums[j+1], nums[j] = nums[j], nums[j+1]
                flag = True
        if not  flag:
            break
    print(nums)
    冒泡法需要数据一轮轮比较
    1.可以设定一个标记判断此轮是否有数据交换发生,如果没有发生交换,可以结束排序,如果发生交 换,继续下一轮排序
    2.最差的排序情况是,初始顺序与目标顺序完全相反,遍历次数1,...,n-1之和n(n-1)/2
    3.最好的排序情况是,初始顺序与目标顺序完全相同,遍历次数n-1
    4.时间复杂度O(n**2),2层for循环;空间复杂度O(1),一个list
    本文为原创文章,转载请标明出处
  • 相关阅读:
    @jackychua博客
    c#类与对象
    SQL SERVER 触发器
    .NET平台及C#面向对象编程
    数据库设计指南【转】
    HTTP 协议是一种请求/响应型的协议
    各种字符编码方式详解及由来(ANSI,GB2312,GBK,Big5,UNICODE,UTF8,UTF16)
    常用协议端口 POP3,IMAP,SMTP,Telnet,HTTP,HTTPS
    asp.net Request.Form Request.para Request.Querystring 区别
    Gzipstream 解压问题
  • 原文地址:https://www.cnblogs.com/harden13/p/8663840.html
Copyright © 2011-2022 走看看