选择排序图示
public static void selectionSort(int[] nums) {
int temp;
for(int i = 0; i < nums.length - 1; i++) {
for(int j = i + 1; j < nums.length; j++) {
if(nums[i] > nums[j]) {
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
}
上面的算法的缺点:在每趟比较过程中,一旦发现某个元素比第1位的元素小,就交换它们,但这是没必要的,徒增了交换的次数 优化:选择排序的核心是,在每趟比较中,找到本趟中最小的元素放在本趟比较的第1个位置,所以选择排序的每趟比较只需要交换一次即可,只要找到本趟比较中最小的元素和本趟比较中第1位置的元素交换即可
public static void selectionSort(int[] nums) {
for(int i = 0; i < nums.length - 1; i++) {
int minIndex = i;
for(int j = i + 1; j < nums.length; j++) {
if(nums[minIndex] > nums[j]) {
minIndex = j;
}
}
if(minIndex != i) {
int tmp = nums[i];
nums[i] = nums[minIndex];
nums[minIndex] = tmp;
}
}
}