思路
一、选择排序
选择排序是从下标为0的位置向后寻找数组中的最小值,找到后把最小值放在下标为0的位置上。
再从下标为1开始,向后寻找最小值,放在下标为1的位置上,依次类推。
二、解题思路
1.用 j 控制寻找最小值的最左边元素的位置,i 为 j 后的第1个元素,从 i 向后遍历数组寻找最小值,并记录下最小值的下标,然后将找到的最小值的下标记录下来与当前遍历的数组最左边的元素交换。
2.然后 j++,再次执行上述循环
public class HelloWorld {
//实现选择排序
public static void main(String[] args) {
int[] arr = {12,3,4,56,76,32,31,54};
printArr(arr);
bubbleSort(arr);
printArr(arr);
}
public static void printArr(int[] arr){ //打印数组
for (int i = 0; i <arr.length ; i++) {
System.out.print(arr[i]+" ");
}
System.out.println("\n");
}
public static void swap(int[] arr,int i,int j){ //交换元素
int tmp = 0;
tmp = arr[j];
arr[j] = arr[i];
arr[i] = tmp;
}
public static void bubbleSort(int[] arr) {
int i = 1;
//判断数组的为空或者数组只有1个元素,则直接返回,不用排序
if (arr.length <= 1 || arr == null) {
return;
}
//遍历数组,比较元素
//从数组(0~N)中寻找最小值,放在0的位置上
//从数组(1~N)中寻找最小值,放在1的位置上...
for (int j = 0; j < arr.length; j++) { //控制内层循环次数,且j的值是内层循环每次遍历的起点
int minValueIndex = j; //定义j=0的时候最小值的下标
for (i = j+1; i < arr.length; i++) { //从j后的第一个数开始遍历
minValueIndex = arr[i] < arr[minValueIndex] ?i:minValueIndex; //找出j后的每个数的最小值,并赋值给minValueIndex
}
swap(arr,j,minValueIndex); //将每次找到的j后的最小值的下标和j的值交换,j的值是内层i的for循环的起点
}
}
}
注意的问题
1.在创建的方法中数组的类型是int[]
2.JAVA中空格需要双引号引起来
3.数组最后一个元素的下标是arr.length-1
总结
编写代码时间很长,遇到了些问题,都已经解决了。中间看了几次老师的代码,在编写bubbleSort的时候问题较多