黑马程序员技术交流社区

标题: 谁帮我看看 这样选择排序为何不行 [打印本页]

作者: 可见    时间: 2012-3-10 00:59
标题: 谁帮我看看 这样选择排序为何不行
public static void swap(int a,int b)
        {
                int temp = a;
                a = b;
                b = temp;
        }
        public static void selectSort(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])
                                        swap(arr[x],arr[y]);
                        }
                }
        }

111.jpg (23.69 KB, 下载次数: 18)

111.jpg

作者: 王睿    时间: 2012-3-10 01:48
本帖最后由 王睿 于 2012-3-10 01:51 编辑

换位方法写错了!
  1. public static void swap(int[] arr ,int a,int b)
  2.         {
  3.                 int temp = arr[a];
  4.                 arr[a] = arr[b];
  5.                 arr[b] = temp;
  6.         }
  7.               
复制代码
调用时:swap[arr,x,y]


作者: 可见    时间: 2012-3-10 01:51
王睿 发表于 2012-3-10 01:48
换位方法写错了!调用时:swap[arr,x,y]

我那种换位方法不对的原因?
作者: 黄秋    时间: 2012-3-10 02:34
刘珂觐 发表于 2012-3-10 01:51
我那种换位方法不对的原因?

java 不象C,可传递引用,它只是传递值:基本类型传递字面值,引用类型传递对象地址,都是复制过去就完事。如LS 的,swap方法参数的 int[] arr ,selectSort 内调用swap(arr,x,y),两方法的 arr 地址相同,指向同一内存块,改变(交换)数组甲的内容,就是改变数组乙。
作者: 彭卫红    时间: 2012-3-10 02:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: 付鹏    时间: 2012-3-10 03:12
你的那段代码 应该是调用swap(arr[x],arr[y])只是从 arr数组中拿出了两个独立的数传给了swap方法 与数组无关 你可以这样写。。我下面的这段代码我手写的,你可以参考一下,既有扩展性,选择排序的效率也很高,还很容易理解 呵呵 仅供参考
public class NumSort {
        public static void main(String[] args) {
                int[] a = new int[args.length];
                for (int i=0; i<args.length; i++) {
                        a[i] = Integer.parseInt(args[i]);
                }
                print(a);
                selectionSort(a);
                print(a);
        }
       
        private static void selectionSort(int[] a) {
                int k, temp;
                for(int i=0; i<a.length; i++) {
                        k = i;
                        for(int j=k+1; j<a.length; j++) {
                                if(a[j] < a[k]) {
                                        k = j;
                                }
                        }
                       
                        if(k != i) {
                                temp = a[i];
                                a[i] = a[k];
                                a[k] = temp;
                        }
                }
        }
       
        private static void print(int[] a) {
                for(int i=0; i<a.length; i++) {
                        System.out.print(a[i] + " ");
                }
                System.out.println();
        }
}




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