题目:给定一个数组 [3,2,11,-9,0,12],如何将这个数组进行排序,得到一个有序序列
排序过程:
1.选择数组中最小元素的索引(从0到length-1),和第一个元素(索引为0) 的两个值交换位置:[-9,2,11,3,0,12]
2.选择数组中最小元素的索引(从1到length-1),和第一个元素(索引为0) 的两个值交换位置:[-9,0,11,3,2,12]
3.选择数组中最小元素的索引(从2到length-1),和第一个元素(索引为0) 的两个值交换位置:[-9,0,2,3,11,12]
排序思路总结:
1.选择的次数为len(arr) :arr 为需要排序的数组
2.选择的序列逐渐缩短
3.找到最小元素的索引
Python代码:
def selectSort(arr): length = len(arr) for i in range(length): min_value_index = i for j in range(i+1,length): if arr[j] < arr[min_value_index]: min_value_index = j arr[i],arr[min_value_index] = arr[min_value_index],arr[i] return arr arr = [3,2,11,-9,0,12] print(selectSort(arr)) #[-9, 0, 2, 3, 11, 12]
时间复杂度:O(n^2)
补充:每次排序,元素相对位置都改变了,所以选择排序是不稳定的。