笔者在刚开始学习选择排序的时候,遇到将最小的位置交换的时候写在第二层循环,导致最后在自己给定的数组,有一个无法正常的排除顺序,希望以后学习算法的人,可以以此为鉴吧,吸收前人的经验吧;
注:笔者将那个地方标识,自己可以输出测试的看看。我就不把运行的结果粘贴出来。
public class SelectionSort {
public static void main(String[] args) {
int arr[]={3,1,2,4,9,6,5,7,8};
int minIndex=0;
int temp=0;
//选择排序:将最小的和当前循环的位置进行较换,并且要记录当前的位置
for(int i=0;i<arr.length;i++){
minIndex=i; //标记当前位置(假设当前位置是最小的下标位置)
for(int j=i+1;j<arr.length;j++){
if(arr[j]<arr[minIndex]){
minIndex=j;
}
//为什么放在这就遍历的有问题
/* temp= arr[i];
arr[i]=arr[minIndex];//保证这个位置是最小的
arr[minIndex]=temp;*/
}
//这两个地方大家需要注意一下
temp= arr[i];
arr[i]=arr[minIndex];//保证这个位置是最小的
arr[minIndex]=temp;
}
//遍历数组
for(int array:arr){
System.out.println("冒泡顺序完成:"+array);
}
}
}