冒泡排序和选择排序
冒泡排序
工作原理
冒泡排序算法的原理如下:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
实现代码
num = [124,32,1,567,25,688] nu = [2,3,1,4,6] def bubble_sort(nums): for i in range(len(nums)-1): #冒泡循环的次数 for j in range(len(nums)-1-i): #每一次冒泡循环的比较次数 if nums[j] > nums[j+1]: nums[j],nums[j+1] = nums[j+1],nums[j] return nums print(bubble_sort(nu)) print(bubble_sort(num))
以上这种冒泡排序还不够完善,以上这种方法在比如[6,1,2,3,4,5]时,将最大的数6排到最后一个位置之后,还是会在1,2,3,4,5之间又进行四次冒泡循环。
因此,我们有这种思路:如果在某次的冒泡循环中,都不需要交换列表中的元素,那么可以判定该元组里的数的大小已经排好,可以直接返回元组
因此,以下代码是上述冒泡排序的一种优化:
def bubble_sort(nums): count_cyc = 0 #冒泡循环次数 for i in range(len(nums)-1): need_ex_flag = False #每一次循环需要交换的次数 count_cyc +=1 #每循环一次,自增1 print(count_cyc) for j in range(len(nums)-1-i): if nums[j] > nums[j+1]: need_ex_flag = True nums[j],nums[j+1] = nums[j+1],nums[j] elif not need_ex_flag: return nums return nums print(bubble_sort(nu)) print(bubble_sort(num))
选择排序
工作原理
- 设第一个元素为比较元素,找出比较元素后面的最小元素,如果在比较元素后的元素中选出的最小元素比比较元素小,那么将它和第一个元素互换,即第一个元素就是最小的元素
- 重复上述操作,我们找出第二小的元素和第二个位置的元素互换,以此类推找出剩余最小元素将它换到前面,即完成排序
实现代码
def selectionSort(arr): for i in range(len(arr)-1): #循环选择的遍数 #记录最小数的索引,将起始元素设为最小元素 minindex = i for j in range(i+1,len(arr)): #第二层for表示最小元素和后面的元素逐个比较 if arr[j]<arr[minindex]: minindex = j # 如果当前元素比最小元素小,则把当前元素角标记为最小元素角标 #i不是最小数时,将i和最小数进行交换 if i !=minindex: # 查找一遍后将最小元素与起始元素互换 arr[i],arr[minindex] = arr[minindex],arr[i] return arr lst = [3,1,6,2,5,9,7] print(selectionSort(lst))
选择排序和冒泡排序很类似,但是选择排序每轮比较只会有一次交换,而冒泡排序会有多次交换,交换次数比冒泡排序少,就减少cpu的消耗,所以在数据量小的时候可以用选择排序,实际适用的场合非常少。

浙公网安备 33010602011771号