简单选择排序,两两比较大小,找出极值,(极大值和极小值)被放置在固定位置的某一端。结果分为升序和降序。

 

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)