zoukankan      html  css  js  c++  java
  • 排序算法-(冒泡、选择、插入算法)

    运行效率较慢的三大排序算法:冒泡、选择与插入算法,时间复杂度都为O(n2),运行效率较慢。

    #python 代码实现如下所示:

    li=[2,1,4,5,7,8,9,5,3]
    #冒泡算法(升序算法)O(n2)
    import random
    from cal_time import *
    @cal_time
    def bubble_sort(li):
    for i in range(len(li)-1): #第i趟
    exchange=False
    for j in range(len(li)-i-1): #无序区域为n-i-1
    if li[j]>li[j+1]:
    li[j],li[j+1]=li[j+1],li[j]
    exchange=True
    #print(li)
    if not exchange:
    return li
    #li=[random.randint(0,10000) for i in range(1000)]
    print(li)
    print("冒泡排序算法的排序结果为:{}".format(bubble_sort(li)))

    #选择排序(每次遍历找最小值,然后放各自的位置上去)
    #1-1不足选择排序算法:占用内存,复杂度高O(n2)
    def select_sort_simple(li):
    li_new=[] #一个重新的新列表,多出来一个内存占用,不推荐使用
    for i in range(len(li)):
    min_val=min(li) #复杂度为O(n)
    li_new.append(min_val)
    li.remove(min_val) #复杂度为O(n)
    return li_new
    print("选择排序算法的排序结果为:{}".format(select_sort_simple(li)))

    #选择算法时间复杂度为O(n2)
    def select_sort(li):
    for i in range(len(li)-1): #i是第i趟,总共需要n-1趟
    min_loc=i
    for j in range(i+1,len(li)):
    if li[j]<li[min_loc]:
    min_loc=j
    li[i],li[min_loc]=li[min_loc],li[i]
    print(li)
    li=[2,1,4,5,7,8,9,5,3]
    print(li)
    select_sort(li)

    #插入排序算法O(n2)
    def insert_sort(li):
    for i in range(1,len(li)): #i表示摸到的次序和牌
    tmp=li[i]
    j=i-1 #指的是手里的牌
    while j>=0 and li[j]>tmp:
    li[j+1]=li[j]
    j=j-1
    li[j+1]=tmp
    print(li)

    li=[2,1,4,5,7,8,9,5,3]
    print(li)
    insert_sort(li)

    运行效果如下:











  • 相关阅读:
    Activiti Model Editor组件
    Activiti 5.17 实体对象与类和数据库表的映射
    工作流入门链接
    揭秘jbpm流程引擎内核设计思想及构架
    比较Activiti中三种不同的表单及其应用
    Activiti源码分析
    Spring Security教程(5)---- 国际化配置及UserCache
    spring DelegatingFilterProxy管理过滤器
    Apache 处理svg工具包Apache(tm) Batik SVG Toolkit
    Binary Tree Right Side View
  • 原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/12401563.html
Copyright © 2011-2022 走看看