黑马程序员技术交流社区

标题: 这是什么排序算法呀?高手速度求解释 [打印本页]

作者: 冯林    时间: 2012-3-14 21:10
标题: 这是什么排序算法呀?高手速度求解释
public class Sort {
        private int [] a;

       

        public void setA(int[] a) {
                this.a = a;
        }
        private static int minArr(int[]a ,int x){
                int min=a[x];
                int p=x;
                for(int y=x;y<a.length;y++){
                        if(min>a[y]){
                                min=a[y];
                                p=y;
                        }
                }
                return p;
        }
       
        public void arrSort(){
                int k=0;
                for(int i=0;i<a.length;i++){
                       
                        int y=        minArr(a,i);
                        if(y!=i){
                                int temp=a[i];
                                a[i]=a[y];
                                a[y]=temp;
                                k++;
                                System.out.println(k);
                        }
                       
                }
        }
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                int []a={5,3,2,6,4,9,7,0};
                Sort sort=new Sort();
                sort.setA(a);
                sort.arrSort();
               
                for(int x:a){
                        System.out.print(x);
                }
                System.out.println();
        }
}

作者: 冯林    时间: 2012-3-14 21:52
人都去那了,没人来回答{:soso_e109:}
作者: 倪鹏博    时间: 2012-3-14 22:19
这是选择排序!
minArr(int[]a ,int x)是取数组a中a[x]之后的元素中的最小值!

int y=        minArr(a,i);//取最小值
                        if(y!=i){   //判断最小值是不是当前元素a[y],不是的话把最小值和当前元素交换
                                int temp=a[i];
                                a[i]=a[y];
                                a[y]=temp;
作者: 冯林    时间: 2012-3-14 22:42
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])
                                {
                                       
                                        int temp = arr[x];
                                        arr[x] = arr[y];
                                        arr[y]= temp;
                                       
                                       
                                }
                        }
                }
        }
与这个比较那个效率更高啊,为什么?{:soso_e132:}
作者: 冯林    时间: 2012-3-14 22:44
倪鹏博 发表于 2012-3-14 22:19
这是选择排序!
minArr(int[]a ,int x)是取数组a中a[x]之后的元素中的最小值!

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])
                                {
                                       
                                        int temp = arr[x];
                                        arr[x] = arr[y];
                                        arr[y]= temp;
                                       
                                       
                                }
                        }
                }
        }
与这个比较那个效率更高啊,为什么?
作者: 倪鹏博    时间: 2012-3-14 22:49
个人认为,第一个要好一点!
首先,第一个用类实现的,且把实现部分封装起来了,比较规范!
其次,交换的步骤少了,相对要快一些!
作者: OMG    时间: 2012-3-14 22:50
数组元素调换频繁,操作任务相对大,效率相对低;




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