python的排序算法

选择排序

选择排序,搜索整个列表,找到最小项的位置,如果该位置不是列表的第一个位置,也就是索引为零,算法就会交换着两个位置的项。然后,算法回到第二个位置并且重复这个过程。

python的排序算法

 

def selectionSort(alist):
    i = 0
    while i < len(alist):
        midIndex = i
        j = i +1
        # 搜索整个列表,找到最小项的索引
        while j < len(alist):
            if alist[midIndex] > alist[j]:
                midIndex = j
            j +=1
        # 如果最小值不是第一项就交换位置
        if alist[i] != alist[midIndex]:
            alist[i],alist[midIndex] = alist[midIndex],alist[i]

        i += 1
    return alist

alist = [14,12,15,1,3,8,2,4,6]
print(selectionSort(alist))

控制台输出:

[1, 2, 3, 4, 6, 8, 12, 14, 15]

这里函数包含了嵌套循环,对于大小为 n 的列表,外围的循环 n-1 次。在第 1 次通过外围循环的时候,内层循环执行 n-1次。在第 2 次通过外围循环的时候,内层循环执行 n-2次。

冒泡排序

冒泡排序,从列表的开头处开始,比较一对数据项,直到移动到列表的末尾。每当成对的两项之间的位置不正确的时候,就交换他们的位置。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

python的排序算法

 

 

def bubbleSort(alist):
    n = len(alist)
    while n > 1:
        i = 1
        while i < n:
            if alist[i] < alist[i-1]:
                alist[i],alist[i-1] = alist[i-1],alist[i]
            i +=1
        n -= 1
    return alist

alist = [14,12,15,1,3,8,2,4,6]
print(bubbleSort(alist))

控制台输出:

[1, 2, 3, 4, 6, 8, 12, 14, 15]