简单选择排序,两两比较大小,找出极值,(极大值和极小值)被放置在固定位置的某一端。结果分为升序和降序。
1) 先确定最大的索引,然后比较。index
简单选择排序总结:
需要数据的一轮轮比较,并在每一轮中发现极值。
没有办法知道当前轮是否已经达到排序要求,但是可以知道极值。
遍历次数1,。。。N-1之和n(n-1)/2
时间复杂程度O(n(**2))。
减少了交换次数,提高了效率,性能略好于冒泡法
1、#选择排序
#两两比较首先找到最大数或最小数,放在一侧,然后找出次大数。
#利用索引
#选择排序
l = [1,5,7,8,9,0,2,4,3,6]
length = len(l)
for i in range(length):
maxindex = i
for j in range(i+1,length):
if l[maxindex]
< l[j]:
maxindex = j
if i !=
maxindex:
(l[maxindex],l[i])
= (l[i],l[maxindex])
print(l)
list2 = [3,9,0,1,5,7,2,4,8,6]
count = 0
count_swap = 0
length = len(list2)
for i in range(length//2):
maxindex = i
minindex = -i -1
mignate = minindex
for j in range(i+1,length-i):
count += 1
if list2[maxindex] < list2[j]:
maxindex = j
if list2[minindex] > list2[-j -1]:
minindex = -j-1
#最大值和最小值一样大,说明数值相等
if list2[minindex] == list2[maxindex]:
break
if i != maxindex:
(list2[i],list2[maxindex]) = (list2[maxindex],list2[i])
count_swap += 1
if i == maxindex or i == length + minindex:
minindex = maxindex
if mignate != minindex:
(list2[mignate],list2[minindex]) = (list2[minindex],list2[mignate])
count_swap += 1
print(list2,count,count_swap)