A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 可见 中级黑马   /  2012-3-10 00:59  /  1829 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

5 个回复

倒序浏览
本帖最后由 王睿 于 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:48
换位方法写错了!调用时:swap[arr,x,y]

我那种换位方法不对的原因?
回复 使用道具 举报
刘珂觐 发表于 2012-3-10 01:51
我那种换位方法不对的原因?

java 不象C,可传递引用,它只是传递值:基本类型传递字面值,引用类型传递对象地址,都是复制过去就完事。如LS 的,swap方法参数的 int[] arr ,selectSort 内调用swap(arr,x,y),两方法的 arr 地址相同,指向同一内存块,改变(交换)数组甲的内容,就是改变数组乙。
回复 使用道具 举报
彭卫红 2012-3-10 02:54:48
报纸
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
你的那段代码 应该是调用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();
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马