算法之常用排序:冒泡排序选择排序

Posted Root用户

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法之常用排序:冒泡排序选择排序相关的知识,希望对你有一定的参考价值。

冒泡排序:

将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮

#!/bin/env python
#_*_ coding:utf-8 _*_
#算法之冒泡排序

li = [13,22,6,99,11]

for m in range(len(li)-1):
    if li[m] > li[m+1]:
        temp = li[m]
        li[m] = li[m+1]
        li[m+1] = temp

#第一次# 13>22 —>pass
#第二次# 22>6  ->li = [13,6,22,99,11]
#第三次# 22>99 ->pass
#第四次# 99>11 ->li = [13,6,22,11,99]
#最大的数字已经找到99,并放在最后,接下来只需要比较前4个数字即可

for m in range(len(li)-2):
    if li[m] > li[m+1]:
        temp = li[m]
        li[m] = li[m+1]
        li[m+1] = temp
#第一次# 13>6  ->li = [6,13,22,11,99]
#第二次# 13>22 ->pass
#第三次# 22>11 ->li = [6,13,11,22,99]
#前4个数字最大数找到22,放在最后,接下来只需比较前3个数字即可

for m in range(len(li)-3):
    if li[m] > li[m+1]:
        temp = li[m]
        li[m] = li[m+1]
        li[m+1] = temp
#第一次# 6>13  ->pass
#第二次# 13>11 ->li = [6,11,13,22,99]
#前3个数字最大数已找到13,放在最后,接来下只需要比较前2个数字即可

for m in range(len(li)-4):
    if li[m] > li[m+1]:
        temp = li[m]
        li[m] = li[m+1]
        li[m+1] = temp
#第一次# 6>11  ->pass
#前2个数字最大数为11,放在最后

print li
#---------------->最终结果为: li=[6,11,13,22,99]





############简化版#############################################################
list = [13,22,6,99,11]
for n in range(1,len(list)-1):    #n=1,2,3,4 #第一次大循环,n=1,m=4
    for m in range(len(list)-n):      #第一次小循环m[0]>m[1],第二次m[1]>m[2],第三次[m2]>[m3],第四次[m3>m4]
        if list[m] > list[m+1]:     #第二次大循环,n=2,m=3
            temp = list[m]            #第一次小循环m[0]>m[1],第二次m[1]>m[2],第三次[m2]>[m3]
            list[m] = list[m+1]     #第三次大循环,n=3,m=2
            list[m+1] = temp          #第一次小循环m[0]>m[1],第二次m[1]>m[2]
                                    #第四次大循环,n=4,m=1
                                      #第一次小循环m[0]>m[1]
print list
#---------------->最终结果为: list=[6,11,13,22,99]

  

选择排序

先选择中间值,然后把比它小的放在左边,大的放在右边(具体的实现是从两边找,找到一对后交换)。然后对两边分别使用这个过程(递归)

#!/bin/env python
#_*_ coding:utf-8 _*_
import time
import random

#生产随机列表
def get_randow():
    list = []
    for x in range(100):
        i = random.randrange(1000)
        list.append(i)
    return list


def select_sort(list):
    for i in range(len(list)):          #for i in range(5) #i=0,1,2,3,4
        for j in range(i,len(list)):        #for j in range(0,5) #i=0,j=0,1,2,3,4
            if list[i] > list[j]:               #if 13>13   ->pass
                tmp = list[i]                   #if 13>22   ->pass
                list[i] = list[j]               #if 13>6    ->list=[6,22,13,99,11]
                list[j] = tmp                   #if 6>99    ->pass
                                                #if 6>11    ->pass
if __name__ == ‘__main__‘:                  #for j in range(1,5) #i=1,j=1,2,3,4
    list = [13,22,6,99,11]                      #if 22>22   ->pass
    #list = get_randow()                        #if 22>13   ->list=[6,13,22,99,11]
    start_time = time.time()                    #if 13>99   ->pass
    select_sort(list)                           #if 13>11   ->list=[6,11,22,99,13]
    end_time = time.time()                  #for j in range(2,5) #i=2,j=2,3,4
    print list                                  #if 22>22   ->pass
    print ‘本次耗时:%s‘%(end_time-start_time)    #if 22>99   ->pass
                                                #if 22>13   ->list=[6,11,13,99,22]
                                            #for j in range(3,5) #i=3,j=3,4
                                                #if 99>99   ->pass
                                                #if 99>22   ->list=[6,11,13,22,99]
                                            #for j in range(3,5) #i=4,j=4
                                                #if 99>99   ->pass

  

 

以上是关于算法之常用排序:冒泡排序选择排序的主要内容,如果未能解决你的问题,请参考以下文章

常用排序算法之插入排序

排序算法冒泡选择排序的Python实现及算法优化详解

排序算法之冒泡选择插入排序(Java)

排序算法之冒泡选择插入排序(Java)

常用算法之 冒泡选择插入快排

java 交换排序之(冒泡排序快速排序)