标签:
原来的选择排序代码
int [] arr = new int[]{3,2,6,9,34,66,11};
public static void xuanze(int[] arr)
{
for (int x=0;x<arr.length-1;x++)
{
for(int y=x+1;y<arr.length;y++)
{
if(arr[x]>arr[y]
{ arr[x]=arr[x]^arr[y];
arr[y]arr[x]^arr[y];
arr[x]=arr[x]^arr[y];
}
}
}
}
分析:每次满足条件都要进行数据的换位,系统资源消耗比较大
优化后
public static void xuanze_1(int[] arr)
{
for (int x=0;x<arr.length-1 ;x++ ) // 完成 X位元素的提取
{
int temp =arr[x];
int index = x;
for (int y=x+1;y<arr.length ;y++ ) // 完成 X位外的所有元素的值的提取
{
if (temp>arr[y]) // 每次满足条件都要进行数据的换位 可以先用一变量记录住最终比较的值,然后进行一次换行即可
{
temp = arr[y];
index =y;
/* arr[x]=arr[x]^arr[y];// 完成互换
arr[y]=arr[x]^arr[y];
arr[x]=arr[x]^arr[y]; */
}
}
if(x!=index)
{
arr[x]=arr[x]^arr[index];// 完成互换
arr[index]=arr[x]^arr[index];
arr[x]=arr[x]^arr[index];
}
}
}
关于 利用第三方变量进行的数据置换 与 异或 进行的数据置换的 区别 (好多视频教学里面没有讲到哦)
前者可以完成所有数据的置换 包括两个相等的数
者只能置换两个不一样的数 ,否则运算出错 。如果想利用此方法来完成,必须加入首要条件 判断 。if(x!=y)
前者加入此判断可以减少两个相等的数据置换,不加入也不会出错的,,只是浪费了一次没有必要的系统资源支出。而后者在浪费系统资源的同时,也会计算出错。所以 if的判断必须加上 。
总结:无论利用那种方法,我们都要加入if 判断 。冒泡方法的优化,不再复述。
一个种地农民的学习感想: 学习这个编程,一定要亲手敲代码,一定要反复的思考,反复的敲。也就是好多视频课程中老师们说的,一定要自己动手,反复的动手。把自己感觉知道了,会了,然后自己证明给自己,确实知道了,确实会了。引申 理论-实践-理论-实践,做任何事情都要以此为根本。认认真真做事,平平静静做事。莫要浮沙筑高台,否则起码是不结实,还有可能中途倒塌,前功尽弃。修心 修身 修心 修身 方能成果。 (可能此感想只适用于才智平庸的我)
2015-5-26
标签:
原文地址:http://www.cnblogs.com/gailuo/p/4530279.html