黑马程序员---------异或在处理排序时的小问题
来源:互联网 发布:sql删除部分字段 编辑:程序博客网 时间:2024/06/06 17:59
.------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
今天,在写数组排序时,发现结果老是错误,部分数变成了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。
0 0
- 黑马程序员---------异或在处理排序时的小问题
- 黑马程序员---多线程的几个小问题
- “黑马程序员”关于排序的问题
- 黑马程序员-----------逻辑与&&和逻辑或||的短路问题
- 黑马程序员--java中File操作的一点小问题
- 黑马程序员--数组的排序
- 黑马程序员--字符串的处理
- 黑马程序员:字符串的处理
- 黑马程序员一java中用异或的方式进行两个变量的赋值变换,需要注意的数据类型问题
- 黑马程序员,黑马论坛------Scanner的小问题(大家来找茬)
- 黑马程序员 + 在学习中遇到的一些问题1
- 黑马程序员 + 在学习中遇到的一些问题2
- 黑马程序员 try或catch中存在return 语句时,它们与finally 的执行顺序问题
- 黑马程序员--关于黑马基础测试题IP排序的问题
- 黑马程序员——JavaSE之数组排序的小总结一
- 黑马程序员_逻辑与和逻辑或的短路问题:
- oracle排序时指定某些值在最前或最后以及针对null值的处理
- 黑马程序员:Servlet的一点小知识
- 深入理解Java虚拟机笔记---类加载过程
- word中的公式排版——公式比文字高的解决方法
- [PHP]基于Sort Set进行活跃用户统计
- Android 发送电子邮件范例
- 关于多线程的经典问题——生产者消费者,不能实现循环工作。
- 黑马程序员---------异或在处理排序时的小问题
- 对于mac系统如何显示隐藏文件
- Hive自定义函数UDF开发
- poj 2250 Compromise(最长公共子序列)
- 使用adb shell dumpsys分析Activity任务栈
- 在Spring、Hibernate中使用Ehcache缓存
- 傥于硕映揽窘晾晾步烤短梦尘窘扛
- 毙谰煤婪仲崭匕诮岗宗痪驳航罕辜
- 棕琶崭杏艺钦速腾钦宰孜诓叵伪谐