选择排序:先指定最大数据所在的位置为0,第一次遍历比较其他位置数据与0上数据的大小,如果大于,则替换改位置为最大数据位置,遍历结束,交换数据(python列表为最大数据与列表最后数据交换)。回到初始指定位置0,进行第二次遍历(第一次遍历得出的最大数据不参与第二次遍历),直至剩列表最后一个数据
【分析】虽然和冒泡排序一样,选择排序的时间复杂度仍然是O(n^2),但是数据交换次数比冒泡排序要少~~
【数据】
54,26,93,17,77,31,44,55,20
【要求】:升序排序
【代码】:
#选择排序 def selectionSort(alist): last=len(alist)-1 count=0 while last>0: # 设定初始最大值所在的位置为0 #必须放在循环里面,不然第一个位置就没法参与排序 maxPosition = 0 for i in range(1,last+1): if alist[i]>alist[maxPosition]: # 替换最大值所在的位置 maxPosition=i if alist[last]!=alist[maxPosition]: #交换最大值和最后位置的数据 temp=alist[last] alist[last]=alist[maxPosition] alist[maxPosition]=temp count=count+1 last=last-1 print('选择排序的数据交换次数为',count,'次') return alist # print(selectionSort([5,2,3,8,4,9,1,1,1,1,11,1,15,6,4,8,9,7,5,1,4,6,1,3,4,999,7,8,78,7,9,5,5])) print(selectionSort([54,26,93,17,77,31,44,55,20]))
【结果展示】:
选择排序的数据交换次数为 6 次
[17, 20, 26, 31, 44, 54, 55, 77, 93]
#如果没有最后的判断,数据交换次数为8次