算法如下:
public int[] simpleSelectSort(int arr[]){
for(int i = 0; i < arr.length - 1 ; i++){
int x = i;
for(int j = i+1; j < arr.length; j++){
if(arr[j] < arr[x]){
x = j;
}
}
int t = arr[i];
arr[i] = arr[x];
arr[x] = t;
System.out.println("第" + (i+1) + "次排序结果:");
for(int k = 0; k<arr.length; k++){
System.out.print(arr[k]+" ");
}
System.out.println("");
}
return arr;
}
测试的数组为: a[] = {8,2,3,5,9,1}
打印的结果如图所示
不知道是哪里出了问题,希望大家指出来~
闹了个笑话……其实这个算法是没有问题,我才发现是因为我用来测试的数据正好在第一次排序后符合要求了,把数据修改了以后打印结果就对了。如图:
a[] = {8,9,3,10,5,2,1};
看来还是要细心才行呐~最后感谢楼上各位的帮助!
这是由于你的x的原因,当第一次满足arr[j] < arr[x]的条件后,x=j;此时,x的只不再是0。所以,出现了这样的结果。
主函数贴出来,程序没什么毛病
楼主我测试了一下,用你的方法的确会出现这种情况,用
System.out.println("第" + (i+1) + "次排序结果:");
System.out.println(Arrays.toString(arr));
的话事正常的现实,放置断点发现会跳出到String类里,等其他大神解答~
public int[] simpleSelectSort(int arr[]){
for(int i = 0; i < arr.length - 1 ; i++){
int x = i;
for(int j = i+1; j < arr.length; j++){
if(arr[j] < arr[x]){
x = j;
}
}
int t = arr[i];
arr[i] = arr[x];
arr[x] = t;
System.out.println("第" + (i+1) + "次排序结果:");
for(int k = 0; k<arr.length; k++){
System.out.print(arr[k]+" ");
}
System.out.println("");
}
return arr;
}
楼主,你只需要修改一丢丢,就对了。
int x = 0;
for(int j = i+1; j < arr.length; j++){
if(arr[j] < arr[i]){
x = j;
}
}
修改这一块,不好意思,刚才粘错了
(https://img-ask.csdn.net/upload/201703/03/1488556202_627363.png)
顺便给你测试了下
最后的结果
public class MyTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int []a={8,2,3,5,9,1};
simpleSelectSort(a);
}
public static void simpleSelectSort(int arr[]){
for(int i = 0; i < arr.length - 1 ; i++)
{
int x = i;
for(int j = i+1; j < arr.length; j++){
if(arr[j] < arr[i]){
x = j;
}
}
int t = arr[i];
arr[i] = arr[x];
arr[x] = t;
System.out.println("第" + (i+1) + "次排序结果:");
for(int k = 0; k<arr.length; k++){
System.out.print(arr[k]+" ");
}
System.out.println("");
}
}
}
(https://img-ask.csdn.net/upload/201703/03/1488556756_772302.png)