基本思想
选择排序首先遍历列表,并且将最小的元素与第一个元素进行比较,随后遍历剩余的元素并将次小的元素与第二个元素进行比较,依次类推。选择排序是和冒泡排序差不多的一种排序。和冒泡排序交换相连数据不一样的是,选择排序只有在确定了最小的数据之后,才会发生交换。
代码实现
package com.csdhsm.sort; /** * @Title: SelectSort.java * @Package: com.csdhsm.sort * @Description 选择排序 * @author Han * @date 2016-4-3 下午3:44:33 * @version V1.0 */ public class SelectSort { public void sort(int[] arr,int len){ for(int i=0;i<len-1;i++){ //记录最小元素的下标 int min = i; for(int j=i+1;j<len;j++){ if(arr[j] < arr[min]){ min = j; } } /** * 将最小值交换至前端 */ int temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } } }
效率分析
不稳定
空间复杂度:O(1)
时间复杂度:O(n2)
最坏情况:O(n2) 第一个元素为最大元素,其余元素正序,需要交换n-1个元素(如:4 3 2 1)
最好情况:O(n2) 正序,不需要交换元素