选择排序法和冒泡排序法解析

Spring 0

一、选择排序法

原理解析:首先在原始序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余原始序列未排序元素中继续寻找最小(大)的元素,然后放在已排序序列的末尾。以此类推,直到所有元素均排序完毕。

实现步骤解析:在序列中,先以第一个元素为参照物,逐个和后面的元素做对比,对比过程中发现元素比第一个元素小(大),替换元素,直到遍历所有元素。

s_list = [23,445,44,62,78,34,46,-1,-33,0]
n = len(s_list)        # 获取列表个数
n1 = s_list.__len__()  # 内置函数获取列表个数
print(n,n1)            # 通过len()函数和内置函数都可以获取个数
for i in range(n-1):                                        # 第一个for控制轮数
    min_idx = i
    for j in range(i+1,n):                                  # j获取的下标始终比i大一位,这样才能做比较
        if s_list[min_idx] > s_list[j]:                     # 根据"<",">"判断,把初始下标值和j下标值做比较,发现值比初始下标值小(大),就替换下标
            min_idx = j
    s_list[i],s_list[min_idx] = s_list[min_idx],s_list[i]   # 第二个for遍历完毕,i还是初始下标,和min_idx下标值交换,这样就把最小的排到前面
print(s_list)

二、冒泡排序法

原理解析:它重复地走访要排序的数列,一次比较两个元素,如果他们的元素值不一致,按照条件进行交换过来,走访数列的工作是重复地进行直到没有再需要交换,数列排序完成。

实现步骤解析:第一个for控制轮数,第二for进行取值比较,比较时,始终小的在前,大的在后,第一次遍历完毕,会把最大的推到最后,所以第二个for遍历完毕一次,都需要-i

p_list = [23,445,44,62,78,34,46,-1,-33,0]
n = len(p_list)
for i in range(n):                                          # i控制轮数
    for j in range(0,n-i-1):                                # j遍历n-i-1次
        if p_list[j] > p_list[j+1]:                         # 两两比较
            p_list[j],p_list[j+1] = p_list[j+1],p_list[j]   # 每次比较,小的在前,大的在后
print(p_list)

发表评论