算法导论:python实现排序、插入排序Insertion-sort、选择排序Selection-sort、冒泡排序Bubble-sort

1. 用python实现一个十个数的数组(列表)的简单排序(无脑排序)

思想:从列表第一个元素到最后一个元素,每个元素都执行与后面所有元素相比较大小,把最小的值调到最前面的位置。

List_A = [7, 11, 16, 3, 28, 15, 36, 1, 49, 81]

for i in range(0, len(List_A)):  # 遍历列表中的每个数
    for j in range(i, len(List_A)):  # 对指定位置i,依次比较i和其后面所有元素的大小,有小的出现就和原i位置的元素调换位置
        if List_A[j] < List_A[i]:
            List_A[i], List_A[j] = List_A[j], List_A[i]
print(List_A)

2. 插入排序算法

思想:一次从桌子上摸起一张牌,此时手中的牌已然排好序。接着新摸的牌从右向左依次比较大小,插入到手里的牌中。

# 插入排序(升序)

List_A = [7, 11, 16, 3, 28, 15, 36, 64, 49, 81]
print(len(List_A))

for i in range(1, len(List_A)):
    key = List_A[i]  # 把数组A的值赋给key,key即是新摸的一张牌
    j = i - 1
    while j >= 0 and List_A[j] > key:  # 左手中的牌依次和新摸的牌相比较,比它大则交换位置,比它小就保持不动
        List_A[j + 1] = List_A[j]
        j = j - 1
        List_A[j + 1] = key
print(List_A)

3. 选择排序法

思想:首先找出列表中最小的元素,并将其和列表中第一个元素调换位置。接着,从剩下的(除了第一个元素)元素中找出最小的元素和第二个元素调换位置......

List_A = [7, 11, 16, 3, 28, 15, 36, 64, 49, 81]
min_value = List_A[List_A.index(min(List_A))]
print(min_value)
for i in range(0, len(List_A)-1):
    j = List_A.index(min(List_A[i: len(List_A)-1]))
    List_A[i], List_A[j] = List_A[j], List_A[i]
print(List_A)

4. 冒泡排序法

思想:以从低到顶即从后往前的方式,依次比较相邻位置数值大小,较小的值如冒泡一样冒到顶端并固定下来,接着再从后排往前找出第二个泡泡。

# 冒泡排序(升序)

List_A = [7, 11, 16, 3, 28, 15, 36, 64, 49, 20]
print(len(List_A))

for i in range(0, len(List_A)):  # 该层循环是给定i值,i之前的已经排好序,i之后的需要进行排序
    for j in range(len(List_A) - 1, i, -1):  # 在剩余需要排序的数中,从最底层,相邻两个数依次比较大小,交换位置
        if List_A[j] < List_A[j - 1]:         # 小的就如同泡泡一样冒到已经最顶端,成为第i+1个排好序的数
            List_A[j], List_A[j - 1] = List_A[j - 1], List_A[j]  

print(List_A)


你可能感兴趣的:(python及算法学习)