思想: 选择排序是将当前元素和之后数组中最小的元素进行比较
- 如果当前元素大于后面数组中最小的元素,那么执行交换操作
- 如果当前元素小于等于后面数组中最小的元素,则不执行交换操作,继续往后比较

时间复杂度:#card=math&code=O%28N%5E2%29)
空间复杂度:#card=math&code=O%281%29)
稳定性:不稳定,例如5 8 5 2 9,第一轮选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了
Java代码实现:
public int[] selectSort(int[] arr){if(arr.length < 2){return arr;}for (int i = 0; i < arr.length; i++) {// 将当前元素认为是最小的元素int index = i;System.out.print(arr[i] + " " );for(int j = i; j < arr.length; j++){// 如果后续有更小的元素,则更新indexif(arr[j] < arr[index]){index = j;}}// 将当前遍历位置的元素和后续数组中最小的元素互换swap(arr, index, i);System.out.println(Arrays.toString(arr));}return arr;}public void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
Python代码实现:
# 选择排序# 每一轮都将当前最小的元素放在已排序区间的后面def select_sort(nums):n = len(nums)for i in range(0,n - 1):min = i #最小元素下标标记for j in range(i + 1,n):if nums[j] < nums[min] :min = j #找到最小值的下标nums[min],nums[i] = nums[i],nums[min] #交换两者print('index: {} -- {}'.format(i, nums))return numsif __name__ == "__main__":nums = [5, 2, 9, 7, 6, 12, 3, 4]# 选择排序print ('select sort result is: ', select_sort(nums))
