请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

在选择排序法中,用java实现这样实现是正确的吧?老师,但是为什么和交换位置的那部分放在if里面结果就是错误的?

正在回答

1回答

你这样描述我不很理解。请把你所说的错误代码贴上来以便我们能在同样的代码上进行分析。


另外,既然你已经直到代码是错误的,也强烈建议你自己尝试使用一个小的,得到错误结果的测试用例跟跟看,看看你的程序是具体在哪里获得了错误的结果?具体在哪里,和你以为的不一样?你认为能得到正确的结果,实际却得到了错误的结果,到底是哪里你思考错了?个人认为这是一个很有意义的过程,其实就是debug的过程。debug是程序员极其重要的一项技能,甚至可以说,大多数程序员80%的时间都是在和debug做斗争的。能够准确定位错误代码中的错误逻辑位置,进而修正它,是开发工作者的核心竞争力:)

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_米流网络_0 #1
    public class Selection_Sort {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int [] ints={
    				5,4,8,7,2,3
    		};
    		ints=SelectionSort(ints, ints.length);
    		for (int i = 0; i < ints.length; i++) {
    			System.out.print(ints[i]);
    		}
    	}
    	public static int[] SelectionSort(int []ints ,int n){
    		for (int i = 0; i < n; i++) {
    			int minIndex=i;
    			for (int j = i+1; j < n; j++) {
    				if(ints[j]<ints[minIndex]){
    					minIndex=j;
    					int tap=ints[minIndex];
    					ints[minIndex]=ints[i];
    					ints[i]=tap;
    				}
    			}
    		}
    		return ints;
    	}
    	
    
    }
    如果这样运行结果是不正确的,但是内部for循环后再交换位置,也就是我之前截图的那样,运行的结果是正确的(从小到大排序)
    回复 有任何疑惑可以回复我~ 2017-08-01 14:58:33
  • liuyubobobo 回复 提问者 qq_米流网络_0 #2
    在你的内层if中,实际上每一次你都将ints[i]和ints[j]交换了位置(if中第一句是minIndex=j,所以下面的交换i和minIndex元素的交换等价于i和j元素的交换);所以,在第一次交换后,i位置存放的是最小元素,但此时你的minIndex却被赋值为j,也就是minIndex没有指向最小的元素,所以后续j和minIndex位置元素的比较,不是将新元素和当前找到的最小元素进行比较。
    回复 有任何疑惑可以回复我~ 2017-08-01 15:09:56
  • 提问者 qq_米流网络_0 回复 liuyubobobo #3
    是的,我也发现了这个问题,然后我改进了,将交换位置的代码放在内层for循环的外面,结果是正确的,那这种算法是不是和老师讲的有所不同呢
    回复 有任何疑惑可以回复我~ 2017-08-01 15:31:57
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信