/**
* 选择排序
*/
@Service
public class SelectionSort implements Sort {
@Override
public String getName() {
return "选择排序";
}
@Override
public int[] sortArray(int[] nums) {
int t, max;
for (int i = 0; i < nums.length; i++) {
//寻找max下标位置
max = 0;
for (int j = 0; j < nums.length - i; j++) {
if (nums[j] > nums[max]) {
max = j;
}
}
//交换
t = nums[max];
nums[max] = nums[nums.length - 1 - i];
nums[nums.length - 1 - i] = t;
}
return nums;
}
}
逻辑解释:
选择排序跟冒泡排序很相似,都是通过外层的一次循环,把待排序的数组中最大的数找出来并放在它应该在的位置上。不过与冒泡排序不同的是,冒泡排序交换的次数比较多,而选择排序交换的次数比较少。因为冒泡排序是每次对比相邻的元素,都有可能会进行交换,而选择排序是直接找出待排序中最大的数,最后再进行交换,由此交换次数会比冒泡排序少。