标签:位置 index 交换 循环控制 有序 turn sort 复杂 for
原理:
数组分有序部分和无序部分,通过2层循环控制。第一层循环控制有序部分,第二层循环控制无序部分。用有序部分的最后一个数和无序部分的数比较,无序部分有小的则交换二者位置。
代码实现:
a=[0,-1,9,6,3,2,10,1,2]
def select_sort(arr):
for i in range(len(arr)-1): #不减1次也可以
print("i",i)
min_value_index=i
for j in range(i+1,len(arr)):
print("j",j)
if arr[j]<arr[min_value_index]:
min_value_index=j
arr[i],arr[min_value_index]=arr[min_value_index],arr[i]
print(arr)
return arr
print(select_sort(a))
时间复杂度和算法稳定性:
for j in range(i+1,len(arr)):执行了n-1+n-2+n-3….3+2+1次,一共(n-1)*n/2
所以是O(n²)
稳定性:选择排序是算法不稳定的。比如序列[3,1,3,5,7]第一个3会和第二个1交换位置,和第二个3的相对位置发生了改变。所以是不稳定的。
标签:位置 index 交换 循环控制 有序 turn sort 复杂 for
原文地址:https://www.cnblogs.com/King-Tong/p/12403856.html