选择排序:
选择排序是一种比较简单的排序,其原理是通过每次将未排序数组的最小值选出来插入到相应位置。
算法实现:
public class SelectSort {
public static int[] sort(int[] nums){
int i,j,min=0;
for (i=0;i<nums.length;i++){
//i为本次插入的位置
min = i;
//for循环找出最小值所在的位置
for (j=i;j<nums.length;j++){
if (nums[min]>nums[j]){
min = j;
}
}
//找到后将最小数和当前位置数交换
int temp = nums[i];
nums[i] = nums[min];
nums[min] = temp;
}
return nums;
}
public static void main(String[] args) {
int[] nums = {7,6,5,4,3,2,1,4,5,3,2,6,88,4,3,2,6,32,45,1,1,1,1,1,1,1,1,3,3,2,3,2,3,2};
nums = sort(nums);
System.out.println(Arrays.toString(nums));
}
}
结果:
[1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 6, 7, 32, 45, 88]
显然选择排序的时间复杂度为O(n²)(虽然时间复杂度和冒泡算法一样,但是选择交换次数较少,每轮最多交换一次,所以其性能一般略优于冒泡)。
选择排序是不稳定的算法。列入:
3(1),3(2),2,4
第一轮后,3(1)和2交换
变成
2,3(2),3(1),4
两个3交换了顺序,不稳定。