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!---------------------------------------------------------------------------------------------------
  • 相关阅读:
    Python动态展示遗传算法求解TSP旅行商问题
    MOEAD算法中均匀权向量的实现---Python
    HDU 5294 多校第一场1007题 最短路+最小割
    POJ 3261 Milk Patterns sa+二分
    HDU 4292 FOOD 2012 ACM/ICPC Asia Regional Chengdu Online
    CodeForces 201A Clear Symmetry
    POJ 1679 The Unique MST 确定MST是否唯一
    POJ 3268 Silver Cow Party 最短路 基础题
    POJ 2139 SIx Degrees of Cowvin Bacon 最短路 水題
    POJ2229 Sumsets 基礎DP
  • 原文地址:https://www.cnblogs.com/ww-xiaowei/p/11301779.html
Copyright © 2011-2022 走看看