八大排序之选择排序

原理:

数组分有序部分和无序部分,通过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的相对位置发生了改变。所以是不稳定的。

原文地址:https://www.cnblogs.com/King-Tong/p/12403856.html