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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 惠晖 中级黑马   /  2012-11-26 11:57  /  1418 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

谁能把选择排序数组 弄个代码形式 把他每一步的比较结果都打印出来, 不是一下打印最终结果

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

5 个回复

倒序浏览
对整型数组按照由小到大的顺序排序,并显示每次的排序结果。代码如下:
public class ArrayDemo{
        public static void main(String[] args) {
                int[] score ={67,89,87,69,90,100,75,90};     //声明数组
                for(int i=1;i<score.length;i++){             //循环判断
                        for(int j=0;j<score.length;j++){
                                if(score[i]<score[j]){                //交换位置
                                        int temp = score[i];
                                        score[i] = score[j];
                                        score[j] = temp;
                                }
                        }
                        System.out.print("第"+i+"次排序的结果:\t");
                        for(int j=0;j<score.length;j++){
                                System.out.print(score[j]+"\t");
                        }
                        System.out.println("");     //换行
                }
                System.out.println("最终的排序结果为:\t");
                for(int i=0;i<score.length;i++){
                        System.out.println(score[i]+"\t");
                }
        }
}

运行结果为:
第1次排序的结果: 67  100  87   69   89   90  75   90
第2次排序的结果: 67  87   100  69   89   90  75   90
第3次排序的结果: 67  69   87   100  89   90  75   90
第4次排序的结果: 67  69   87   89   100  90  75   90
第5次排序的结果: 67  69   87   89   90   100 100  90
第6次排序的结果: 67  69   75   87   89   90  100  90
第7次排序的结果: 67  69   75   87   89   90  90  100
最终排序的结果:   67  69   75   87   89   90  90  100
你可以根据以上结果观察每次循环后的数组内容顺序的变化。

点评

这貌似是冒泡  发表于 2012-11-26 18:47
回复 使用道具 举报
本帖最后由 惠晖 于 2012-11-26 13:50 编辑
潘天功 发表于 2012-11-26 13:20
对整型数组按照由小到大的顺序排序,并显示每次的排序结果。代码如下:
public class ArrayDemo{
        public s ...

i第一次取到69他最小所以不变,
i第2次取到的值应该是89  89应该比到90就换位置了  为什么他没换 却跟100换了位置   这是为什么?
回复 使用道具 举报

public class ArrayPaixu {
        /**
         * 选择排序法
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                //定义数组
                int[] arr={2,6,8,7,9,5};
                System.out.println("原始数组序列为:");
                print1(arr);//调用输出函数
                System.out.println();//输出回车
                for(int i=0,k=1;i<arr.length-1;i++,k++)//双重循环,其中k和l为输出的序号,所以从1开始。
                {
                        for(int j=i+1,l=1;j<arr.length;j++,l++)
                        {
                                if(arr[i]>arr[j])
                                {
                                        int t=arr[i];
                                        arr[i]=arr[j];
                                        arr[j]=t;//判断大小后交换位置
                                        prints(arr,l);//输出每次交换一位后的数组
                                }
                                else
                                        prints(arr,l);//输出每次对比以后没有交换的数组
                        }
                        if(i<arr.length-2)//判断是否比较完了
                        print2(arr,k);//没有就输出对比一轮后的数组
                        else
                        prints(arr);//对比完成后输出最终数组
                }

        }
        static void prints(int[] arr,int j)//输出对比次数函数
        {
                System.out.print("第"+j+"次");
                print1(arr);
                System.out.println();
        }
        static void print2(int[] arr,int i)//输出对比一轮后数组函数
        {
                System.out.print("第"+i+"轮");
                print1(arr);
                System.out.println();
        }
        static void prints(int[] arr)//输出最终数组
        {
                System.out.println("最终排序后序列:");
                print1(arr);
        }
        static void print1(int[] arr)//定义输出函数
        {
                for(int var:arr)
                {
                        System.out.print(var+" ");
                }
        }
}


结果:
原始数组序列为:
2 6 8 7 9 5
第1次2 6 8 7 9 5
第2次2 6 8 7 9 5
第3次2 6 8 7 9 5
第4次2 6 8 7 9 5
第5次2 6 8 7 9 5
第1轮2 6 8 7 9 5
第1次2 6 8 7 9 5
第2次2 6 8 7 9 5
第3次2 6 8 7 9 5
第4次2 5 8 7 9 6
第2轮2 5 8 7 9 6
第1次2 5 7 8 9 6
第2次2 5 7 8 9 6
第3次2 5 6 8 9 7
第3轮2 5 6 8 9 7
第1次2 5 6 8 9 7
第2次2 5 6 7 9 8
第4轮2 5 6 7 9 8
第1次2 5 6 7 8 9
最终排序后序列:
2 5 6 7 8 9
每一次对比也都写出来了

点评

代码有点繁复了吧。  发表于 2012-11-26 18:48
回复 使用道具 举报
惠晖 发表于 2012-11-26 13:44
i第一次取到69他最小所以不变,
i第2次取到的值应该是89  89应该比到90就换位置了  为什么他没换 却跟100 ...

我用的是冒泡排序、两两比较
回复 使用道具 举报
潘天功 发表于 2012-11-26 13:20
对整型数组按照由小到大的顺序排序,并显示每次的排序结果。代码如下:
public class ArrayDemo{
        public s ...

嗯、没看清楚、所以就按冒泡写了、呵呵,选择排序也可以,就是改变for循环里的条件,如果需要,我可以写个选择排序版的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马