在 Java 中实现 冒泡排序 和 选择排序
冒泡排序
对于一个元素可比较的数组, 从第一个元素开始顺序做相邻元素的大小比较, 如果左边大于右边, 则左右调换;
完成所有元素比较后, 排除最右元素做下一次比较循环
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int[] array = {3,9,2,5,8};
int temp;
for (int j = array.length - 1; j > 1; j--) {
for (int i = 0; i < j; i++) {
if (array[i] > array[i+1]) {
temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
}
System.out.println(Arrays.toString(array));
}
}
选择排序
同样是对于一个元素可比较数组, 从第一个元素开始, 遍历由其本身开始的右侧所有元素, 找出最小值与其交换位置
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
int[] array = {2,3,7,0,89};
for (int i = 0; i < array.length - 1; i++) {
//int temp = array[i];
int min = i;
//for (int j = i; j < array.length - 1; j++) {
for (int j = i + 1; j < array.length; j++) {
if (array[j] < array[min]) {
min = j;
}
}
if (min != i) {
int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
}
System.out.println(Arrays.toString(array));
}
}
踩坑记录
每次循环都是做一个 最小值判断 跟 位置交换(如果需要)
我一开始选择使用 int temp 来保存本次循环最左边的元素 array[i] 并在获取最小值的循环中用它来保存最小值
结果确实能把最小值赋给 array[i] , 但是无法实现位置交换
答案中则是使用 int i 来保存下标, 从而实现位置记录最终进行位置交换操作