zoukankan      html  css  js  c++  java
  • 【python练习题】冒泡排序 和插入排序 (list的应用)

    题目一 冒泡排序 由小到大的顺序

     1 '''第一个是自己写的
     2 temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34]
     3 第一趟比较后,找到最小的数,且放在第一位,始终拿【0】与其余比较
     4 第二趟比较时,始终拿【1】与其他后面的比较
     5 '''
     6 #for i in temLst:  要用下标,感觉while更顺手 (自己写的) 循环次数比下面的多一些哦
     7 temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34]
     8 n=len(temLst)
     9 i=0
    10 j=0
    11 count=0  #循环了121次
    12 while i<(n-1):
    13     j=i+1
    14     while j<=(n-1):
    15         count = count + 1
    16         if temLst[i]>temLst[j]:
    17             temLst[i],temLst[j]=temLst[j],temLst[i]
    18         else:
    19             j=j+1
    20     i=i+1
    21 print('自己写的count循环次数;',count)

    冒泡排序:

    # 通过打印循环次数也比较,谁更高效
    #for循环写冒泡排序
    temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34] n=len(temLst) for i in range(n): for j in range(n-i-1): if temLst[j]>temLst[j+1]: #目标是j+1 是大一点的, temLst[j],temLst[j+1]=temLst[j+1],temLst[j] # print(temLst) #冒泡排序,用while来写 temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34] n=len(temLst) i=0 count1=0 #循环了91次 while i<n-1: j=0 while j<n-i-1: count1=count1+1 if temLst[j]>temLst[j+1]: #目标是j+1 是大一点的, temLst[j],temLst[j+1]=temLst[j+1],temLst[j] j=j+1 i=i+1 print('冒泡排序循环次数:',count1)

    题目二 插入排序 适用于少量数据的排序

    方式一:采用insert pop的方式

     1 temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34]
     2 n=len(temLst)
     3 count2=0  #循环67次
     4 for i in range(1,n): #i in range(n)  取值: 默认是从0开始,但不包括end。
     5     for j in range(i):
     6         count2=count2+1
     7         if temLst[i]<temLst[j]:
     8             temLst.insert(j,temLst[i])   # 从有序的数组,第一个元素开始比较,碰到比自己大的数字,赶紧刹车,停在那,所以选择insert       #比如 i=3时,[1,3,6,53,6,7,35,63,6,4,7,5,6,7,34]
     9             temLst.pop(i+1)             # 因为前面的insert操作,所以后面位数+1,这个位置的数已经insert到前面去了,所以pop弹出    #[1,3,6,53,6(pop掉),7,35,63,6,4,7,5,6,7,34]
    10             break
    11 print('插入排序,从有序数组最前面开始比较,insert后,再pop,循环次数:',count2)
     1 # 方式二 插入排序算法:
     2 temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34]
     3 n=len(temLst)
     4 count3=0   #循环了34次
     5 for i in range(1,n):  #从1开始,是因为第0位看成了有序数组
     6     j=i
     7     while j-1>=0 and temLst[j-1]>temLst[j]: #从有序数组的最后一位开始,不断往前比较,遇到较大的就交换,且保证j-1>=0
     8         count3=count3+1
     9         temLst[j],temLst[j-1]=temLst[j-1],temLst[j]  #比如 i=3 时,先是 56 与6 比较,互换:1 3 6 53
    10         j=j-1
    11 print(temLst)
    12 print('插入排序,从有序数组的最后一个开始比较,找到合适的位置,循环次数:',count3)





    -----------------------------------------Have a good day!---------------------------------------------------------------------------------------------------
  • 相关阅读:
    awk统计命令(求和、求平均、求最大值、求最小值)(转)
    高性能跨平台网络IO(Reactor、epoll、iocp)总结
    进程通信和同步(转)
    C++11原子操作与无锁编程(转)
    在线代码编译运行工具
    linux ps 命令的查看
    转: linux sed 命令的使用
    转:利用Eclipse CDT 阅读C/C++代码
    转:Raft一致性选举算法的ppt与视频
    转:ffmpeg time_base详解
  • 原文地址:https://www.cnblogs.com/ww-xiaowei/p/11301779.html
Copyright © 2011-2022 走看看