黑马程序员技术交流社区

标题: 选择了排序 [打印本页]

作者: 张海龙    时间: 2013-6-27 23:22
标题: 选择了排序
public class Test1{
        public static void main(String[] args){
                int[] arr={2,3,4,7,34,56,78,23,34};
                selectSort(arr);
                printarry(arr);

        }
        public static void selectSort(int[] arr){
                for(int i=0;i<arr.length-1;i++){
                        for(int j=i+1;i<arr.length;j++){
                                if(arr[i]>arr[j])
                                int temp=arr[i];
                                arr[i]=arr[j];
                                arr[j]=temp;
                        }  
                }
        }
        public static void printarry(int[] arr){
                for(int i=0;i<arr.length;i++)
                        if(i!=arr.length-1)
                                System.out.print(arr[i]+",");
                        else
                                System.out.println(arr[i]);
                }
}
为什么运行时会出错呢

作者: 傲鸽    时间: 2013-6-27 23:36
  1. public class Test{
  2.     public static void main(String[] args){
  3.             int[] arr={2,3,4,7,34,56,78,23,34};
  4.             selectSort(arr);
  5.             printarry(arr);

  6.     }
  7.     public static void selectSort(int[] arr){
  8.             for(int i=0;i<arr.length-1;i++){
  9.                     for(int j=i+1;j<arr.length;j++){
  10.                             if(arr[i]>arr[j]){
  11.                                     int temp=arr[i];
  12.                                     arr[i]=arr[j];
  13.                                     arr[j]=temp;
  14.                             }
  15.                     }  
  16.             }
  17.     }
  18.     public static void printarry(int[] arr){
  19.             for(int i=0;i<arr.length;i++)
  20.                     if(i!=arr.length-1)
  21.                             System.out.print(arr[i]+",");
  22.                     else
  23.                             System.out.println(arr[i]);
  24.             }
  25. }
复制代码
以上是调试后正确的程序,楼主程序里有两个错误,里层for循环的循环条件i的 i 应该改成 j ,if语句下面的三条交换数组元素的位置的语句应该加上大括号
作者: 傲鸽    时间: 2013-6-27 23:38
补充:两个问题都是selectSort方法里的
作者: gzbbxu    时间: 2013-6-28 06:29
接选择排序算法的思想比较简单:(假设数据放在一个数组a中,且数组的长度是N)

  1:从a[0]-a[N-1]中选出最小的数据,然后与a[0]交换位置

  2:从a[1]-a[N-1]中选出最小的数据,然后与a[1]交换位置(第1步结束后a[0]就是N个数的最小值)

  3:从a[2]-a[N-1]中选出最小的数据,然后与a[2]交换位置(第2步结束后a[1]就是N-1个数的最小值)

  以此类推,N-1次排序后,待排数据就已经按照从小到大的顺序排列了。

代码我就不写了。。你的问题楼上也给你解决了,写这些希望能够帮助你更加理解选择排序。
作者: 张海龙    时间: 2013-6-28 12:48
谢谢呀,刚刚我试了试,通过了,再次谢谢了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2