黑马程序员技术交流社区
标题:
数据交换中出现了错误求解
[打印本页]
作者:
赵国刚
时间:
2013-8-11 11:40
标题:
数据交换中出现了错误求解
01.public static void main(String[] args)
02. {
03. int[] arr = new int[] {3,2,6,11,9,1,0};
04.
05. System.out.print("排序之前的序列:");
06. printArr(arr);
07. //bubbleSort(arr);
08. selectSort(arr);
09. System.out.print("排序之后的序列:");
10. printArr(arr);
11. }
12.public static void selectSort(int[] arr)
13. {
14. for(int x=0; x<arr.length-1; x++)
15. {
16. //找出最小值
17. int min=x;
18. for(int y=x+1; y<arr.length; y++)
19. {
20. if(arr[min]>arr[y])
21. min=y;
22.
23. }
24. arr[min]=arr[min]^arr[x];
25. arr[x]=arr[min]^arr[x];
26. arr[min]=arr[min]^arr[x];
27.
28.
29. }
30. }
复制代码如上所示,问题出在输出结果上,排序之后发现输出为:
排序之前的序列:[3,2,6,11,9,1,0]
排序之后的序列:[0,1,2,3,6,0,11]
不知为啥9变成0了。。
而将上述替换方式改成
int temp=arr[min];
arr[min]=arr[x];
arr[x]=temp;
则无此问题
另外单独验证了,异或方式交换数据的方法结果正确,至此就十分纳闷了 不知是什么原因导致的。。
求指教 先谢过了
作者:
龚首道
时间:
2013-8-11 14:03
这里
······
for(int x=0; x<arr.length-1; x++)
{
int min=x;
·······
复制代码
你把min=x,x等于0,(不应该有这句:“int min = x”,多此一举),而且你又把交换语句写在了内层for循环的外面。正常的交换语句应该写在内层for里面。
还有, "min=y;",这里,你交换了角标,然后又通过
arr[min]=arr[min]^arr[x];
arr[x]=arr[min]^arr[x];
arr[min]=arr[min]^arr[x];
复制代码
交换了元素。如果要交换角标,就只交换角标,要交换元素就交换元素,否则,代码就乱套了。达不到最初的构想。
作者:
龚首道
时间:
2013-8-11 14:07
for (int x = 0; x < arr.length-1 ; x++)
{
for (int y = x + 1; y < arr.length;y++)
{
if ( arr[x] > arr[y])
······交换语句·······
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2