算法:冒泡排序(python版)

1.将n个元素从大到小排序后,选择第k个大的元素

#!/usr/bin/env python
#coding -*- utf:8 -*-
#冒泡排序选第k个元素
import random
import time

def select_k():
    n = int(input("所要生成的数组的长度:"))
    arraya = []
    for i in range(n):
        x = random.choice(range(100))
        arraya.append(x)
    print("所生成的数组(未排序):", arraya)
    arrayb = bubble_sort(arraya)
    print("排序后的数组:", arrayb)
    k = int(input("选择第几个元素:"))

    #从大到小第k个元素
    result = arrayb[k-1]
    return result


def bubble_sort(a):
    for i in range(len(a)):
        for j in range(i,len(a)):
            if a[i]<a[j]:
                tmp = a[i]
                a[i] = a[j]
                a[j] = tmp
    return a

if __name__=='__main__':
    t0 = time.clock()

    print("第k个元素是:",select_k())

    #第二次调用clock()减去第一次调用clock()即为程序执行的时间
    print("程序执行的时间:",time.clock()-t0)

 2.泡排序前k个元素,后面的元素逐个和第k个元素比较,如果小于则忽略,如果大于则加入到正确的位置并移除最后一个元素

#!/usr/bin/env python
#coding -*- utf:8 -*-
#冒泡排序前k个元素,后面的元素逐个和第k个元素比较,如果小于则忽略,如果大于则
#加入到正确的位置并移除最后一个元素

import random
import time

def select_k():
    n = int(input("所要生成的数组的长度:"))
    k = int(input("选择第几个元素:"))
    arraya = []
    for i in range(n):
        x = random.choice(range(100))
        arraya.append(x)
    print("所生成的数组(未排序):", arraya)
    arrayb = bubble_sort(arraya[:k])
    print("前k个元素排序后的数组:", arrayb)

    for i in range(k, n):
        if(arrayb[-1]<arraya[i]):
            arrayb.append(arraya[i])
            arrayb = bubble_sort(arrayb)
            arrayb.pop()

    #返回第k个大的元素
    result = arrayb[-1]
    return result

def bubble_sort(a):
    for i in range(len(a)):
        for j in range(i,len(a)):
            if a[i]<a[j]:
                tmp = a[i]
                a[i] = a[j]
                a[j] = tmp
    return a

if __name__=='__main__':
    t0 = time.clock()
    print("第k个大的元素是:",select_k())

    #第二次调用clock()减去第一次调用clock()即为程序执行的时间
    print("程序执行的时间:",time.clock()-t0)

3.时间对比

方法一:

N |  10  |  100     |  1000  |   5000 |   10000 | 20000 |

T |  0.0 |  0.001  |  0.06   |   1.17  |   4.65    |  18.25 |

方法二:

N |  10  |  100    |  1000  |   5000 |   10000 | 20000 |

T |  0.0 |   0.0    |   0.0    |   0.02  |   0.02    |  0.03   |

原文地址:https://www.cnblogs.com/xautxuqiang/p/6059807.html