A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵国刚 中级黑马   /  2013-8-11 11:40  /  975 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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;
则无此问题
另外单独验证了,异或方式交换数据的方法结果正确,至此就十分纳闷了 不知是什么原因导致的。。
求指教 先谢过了

2 个回复

倒序浏览
这里
  1. ······
  2. for(int x=0; x<arr.length-1; x++)
  3. {
  4. int min=x;
  5. ·······
复制代码
你把min=x,x等于0,(不应该有这句:“int min = x”,多此一举),而且你又把交换语句写在了内层for循环的外面。正常的交换语句应该写在内层for里面。

还有, "min=y;",这里,你交换了角标,然后又通过
  1. arr[min]=arr[min]^arr[x];
  2. arr[x]=arr[min]^arr[x];
  3. arr[min]=arr[min]^arr[x];
复制代码
交换了元素。如果要交换角标,就只交换角标,要交换元素就交换元素,否则,代码就乱套了。达不到最初的构想。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1. for (int x = 0; x < arr.length-1 ; x++)
  2. {
  3. for (int y = x + 1; y < arr.length;y++)
  4. {
  5. if ( arr[x] > arr[y])
  6. ······交换语句·······
  7. }
  8. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马