码迷,mamicode.com
首页 > 编程语言 > 详细

八大排序之选择排序

时间:2020-03-03 19:08:39      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:位置   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!