黑马程序员---------异或在处理排序时的小问题
2014-12-14 00:07
246 查看
.------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
今天,在写数组排序时,发现结果老是错误,部分数变成了0,代码如下
输出结果为,231,211,0,54,15,12。
很奇怪,本该是123的地方却成了0。手动交换了数组内顺序后,每次都有不同数变成0。响了一会,觉得可能是异或交换数据导致的,于是换成正常的第三方变量的方法。
数据排序为231,211,123,54,15,12。排序正常,确定是异或的问题。于是我在异或交换数据后加了一行代码,打印a,i,arr[i]:
System.out.println( a + " " +i +" " +arr[i] );
发现当arr[i]为0时,a和i是相等的,至此就一切得到了解释,当数组选择排序时,如果这个数已经处在正确的位置上,那么这异或就相当于arr[i]^arr[i]^arr[i]^arr[i],自然是0;于是修改代码:
排序正确的显示为231,211,123,54,15,12。
排序正确的显示为231,211,123,54,15,12。排序正确的显示为231,211,123,54,15,12。排序正确的显示为231,211,123,54,15,12。排序正确的显示为231,211,123,54,15,12。排序正确的显示为231,211,123,54,15,12。
今天,在写数组排序时,发现结果老是错误,部分数变成了0,代码如下
class Array{ public static void main(String []args){ int []arr = {123,54,231,15,12,211}; for(int i=0 ,j = 0,a=0;i<arr.length -1;i++){ a = i ; for( j = i+1;j<arr.length;j++){ if(arr[j] > arr[a] ){ a = j ; } } arr[i] = arr[i] ^ arr[a]; arr[a] = arr[i] ^ arr[a]; arr[i] = arr[i] ^ arr[a]; } for(int x :arr){ System.out.println( x ); } } }
输出结果为,231,211,0,54,15,12。
很奇怪,本该是123的地方却成了0。手动交换了数组内顺序后,每次都有不同数变成0。响了一会,觉得可能是异或交换数据导致的,于是换成正常的第三方变量的方法。
class Array{ public static void main(String []args){ int []arr = {123,54,231,15,12,211}; for(int i=0 ,j = 0,a=0;i<arr.length -1;i++){ a = i ; int temp = 0; for( j = i+1;j<arr.length;j++){ if(arr[j] > arr[a] ){ a = j ; } } temp = arr[a]; arr[a] = arr[i]; arr[i] = temp; } for(int x :arr){ System.out.println( x ); } } }
数据排序为231,211,123,54,15,12。排序正常,确定是异或的问题。于是我在异或交换数据后加了一行代码,打印a,i,arr[i]:
System.out.println( a + " " +i +" " +arr[i] );
发现当arr[i]为0时,a和i是相等的,至此就一切得到了解释,当数组选择排序时,如果这个数已经处在正确的位置上,那么这异或就相当于arr[i]^arr[i]^arr[i]^arr[i],自然是0;于是修改代码:
class Array{ public static void main(String []args){ int []arr = {123,54,231,15,12,211}; for(int i=0 ,j = 0,a=0;i<arr.length -1;i++){ a = i ; for( j = i+1;j<arr.length;j++){ if(arr[j] > arr[a] ){ a = j ; } } if( a!=i ){ arr[i] = arr[i] ^ arr[a]; arr[a] = arr[i] ^ arr[a]; arr[i] = arr[i] ^ arr[a]; } } for(int x :arr){ System.out.println( x ); } } }
排序正确的显示为231,211,123,54,15,12。
排序正确的显示为231,211,123,54,15,12。排序正确的显示为231,211,123,54,15,12。排序正确的显示为231,211,123,54,15,12。排序正确的显示为231,211,123,54,15,12。排序正确的显示为231,211,123,54,15,12。
相关文章推荐
- (原创)处理Sql server在不同环境下排序规则不一致的问题(二)
- 如何处理DataTable.Select();执行后重新排序的问题!
- C语言 - 选择排序中的--异或交换--问题分析
- 黑马程序员——JAVA基础--- 集合IO综合练习排序问题
- 程序员求职之道(《程序员面试笔试宝典》)之海量数据处理(排序问题)?
- 触发器(当2个表中的相应值改变时同时改变一个表中的一个字段)(同时有处理“无法解决 equal to 操作的排序规则冲突”问题)
- mysql 查询的时候处理中文汉字按照字母排序问题
- “黑马程序员”声明类Student,包含3个成员变量:name、age、score,创建5个对象装入TreeSet,按照成绩排序输出结果(考虑成绩相同的问题)
- 海量数据处理之排序问题
- IE数组排序问题的处理
- Template + Strategy + SingleTon + Factory 处理排序问题
- 处理dotProject中的按“分配的用户”排序问题
- 黑马程序员:学生类按成绩排序问题
- 黑马程序员---------------------声明类Students,包含3个成员变量:name、age、score,创建5个对象装入TreeSet,按照成绩排序输出结果(考虑成绩相同的问题)。
- 海量数据处理之排序问题
- (原创)处理Sql server在不同环境下排序规则不一致的问题(三)
- Extjs Grid 拖动排序 (处理拖动后序号刷新、多行拖动序列倒序的问题)
- 《黑马程序员》 Could not find jar tool executable 问题处理
- PHP中使用asort进行中文排序失效的问题处理
- 分治法处理排序问题