黑马程序员技术交流社区
标题:
关于数组排序
[打印本页]
作者:
梁清平
时间:
2012-5-13 18:45
标题:
关于数组排序
public class ArraySelectSort
{
public static void main(String[] args)
{
int[] arr = {7,6,4,1,9,13,45,66,3};
sort(arr);
}
public static void sort(int[] a)
{
for(int i=0;i<a.length;i++)
{
int temp=0;
for(int j=i+1;j>a.length;j++)
{
if(a[i]>a[j])
{
temp = a[j];
}
else
{
temp = a[i];
}
}
a[i] = temp;
}
}
请问:上面的排序算法有没有错误啊?如果是对的还能不能进一步提高运算效率?该怎么做呢?
作者:
云惟桉
时间:
2012-5-13 20:19
内层循环不是应该 j<a.length么,怎么变成 > 了。
在选择排序的原则上算是效率很好的了,起码交换次数已经优化过。
如果楼主需要再了解更高效率的排序,可以参考一下数据结构或者算法设计的书
里面有介绍到希尔排序、快速排序、归并排序等等
作者:
小鹿叙鹿
时间:
2012-5-13 21:04
答案呢,是错误的。
输出的答案全为0
原因是这样的:在第二个for循环中的循环条件就是错误的for(int j=i+1;j>a.length;j++)
j怎么可能一开始就大于a.length呢?这个错误不应该
其次就是你在循环判断的时候的值也只能是数组中最小的那几位
你看啊:不论怎样,第二个循环都是随着条件循环多次或一次,当a[i]=7>6的时候,temp=7,还会继续循环比较,当arr[0]=7<9的时候,temp=9,
从此可以看出,无论怎样比较最后要看的也就是它与最后一位的比较即可,第一轮比较的最后结果时a[0]=7>3,肯定不大于,所以temp=3,当内循环结束
的时候,arr[i]=3.................
至于剩下的循环,于第一轮的分析是一样的,所以出现的就只能是最小的那几个
最重要的一点是:你没有交换位置,你只是把值给赋给你希望的角标了,但是那个要交换的值还是在原来的位置上。
效率肯定是没有的,一般像这些排序,最好的是早写好的对象,这样效率会高,因为它们是跟系统融合的,而我们写的就跟系统的融合就不是那么的密切了。
但是当做练习的时候,还是可取的。
作者:
冯建鹏
时间:
2012-5-13 22:07
刚看到这题的时候看到第二个循环里面”>“ 最起码应该改为”<“,后来感觉应该没什么问题,运行结果出乎我的意料,经过仔细思考发现for(int j=i+1;j>a.length;j++)
{
if(a[i]>a[j])
{
temp = a[j];
}
else
{
temp = a[i];
}
}
a[i] = temp;
这些代码执行完之后,并没有交换数组角标所对应的值,而是将最小的值赋值给a[i]坐标。。
public class SortDemo
{
public static void main(String[] args)
{
int[] arr = {7,6,4,1,9,13,45,66,3};
sort(arr);
System.out.println(Arrays.toString(arr));
}
public static void sort(int[] a)
{
for(int i=0;i<a.length-1;i++)
{
for(int j=i+1;j<a.length;j++)
{
if(a[i]>a[j])
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
}这样才靠谱 呵呵 这也是老师的代码。。。
作者:
逄焕玮
时间:
2012-5-14 00:33
j>a.length 应该是笔误吧
if(a[i]>a[j])
{
temp = a[j];
}
else
{
temp = a[i];
}
}
a[i] = temp;
这一段开始看的时候确实有些别扭啊,仔细看了下,还确实是不对
如果a[i] > a[j],a[j]的值赋给temp,然后temp值赋给a[i],a[j]的值并未改变,只是a[i]的值变成了小值a[j],然后a[i]和a[j]中存储的都是小值a[j]了。。。
这样的话template定义了也没什么意义了
还是
temp = a[i];
a[i] = a[j];
a[j] = temp;
简单易用啊
或者还可以对角标进行交换
temp = i ;
i = j ;
j = temp;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2