黑马程序员技术交流社区

标题: 选择排序输出总是不正确 求大神指点。 [打印本页]

作者: xhCx    时间: 2015-5-23 23:12
标题: 选择排序输出总是不正确 求大神指点。

public class Array {
        private Array(){
               
        }
        /**
         * 取int数组最大值
         * @param arr传入一个int数组
         * @return返回一个int数值
         */
        public  static int max(int arr[]){
                int max=arr[0];
                for(int i=0;i<arr.length;i++){
                        if(arr[i]>max){
                                max=arr[i];
                        }
                }
                return max;
        }
        /**
         * 取int数组里面最小值
         * @param arr传入一个int数组
         * @return 返回一个int数值
         */
        public static int min(int arr[]){
                int min=arr[0];
                for(int i=0;i<arr.length;i++){
                        if(arr[i]<min){
                                min=arr[i];
                        }
                }
                return min;
        }
        /**
         * 对传入的int数组里面进行冒泡排序
         * @param arr 传入一个int数组
         */
        public static int[] maoSort(int[] arr){
                for(int i=0;i<arr.length-1;i++){
                        for(int j=i+1;j<arr.length;j++){
                                replace(arr,i,j);
                        }
                }
                return arr;
               
        }
        /**
         * 对传入的int数组里面进行选择排序
         * @param arr 传入一个int数组
         */
        public static int[] xuanzeSort(int[] arr){
                for(int i=0;i<arr.length-1;i++){
                        for(int j=0;j<arr.length-1;j++){
                                replace(arr,j,j);
                        }
                }
                return arr;
        }
       
        public static void replace(int[] arr,int a,int b){
                if(arr[a]>arr[b]){
                        int t=arr[a];
                        arr[a]=arr[b];
                        arr[b]=t;
                }
        }
}
public class A1_1 {
        public static void main(String[] args){
                int[] arr={23,34,45,12,333,25};
               
       
                System.out.println("最大值是:"+Array.max(arr));
                System.out.println("最小值是:"+Array.min(arr));
                int[] intAr = Array.xuanzeSort(arr);
                System.out.println("选择排序:"+Arrays.toString(intAr));
                int[] intAr1=Array.maoSort(arr);
                System.out.println("冒泡排序:"+Arrays.toString(intAr1));
               
        }
}

作者: Amu    时间: 2015-5-23 23:33
你的核心代码有问题 冒泡排序和选择排序都搞反了
不要把两数组元素比较的代码放入另一个方法中,比较后在用swap()交换位置即可
冒泡排序核心代码,它们是相邻元素互相比较,小的上浮,大的下沉,所谓冒泡,最大值出现在末角标位置
  1. for (int i=0;i<arr.length-1 ;i++ )
  2.                 {
  3.                         for (int j=0;j<arr.length-1-i ;j++ )
  4.                         {
  5.        if (arr[j]>arr[j+1])
  6.                                 {
  7.         swap(arr,j,j+1);
  8.                                 }
  9.                         }
  10.                 }
复制代码
选择排序是数组中的每个元素分别与其他元素进行比较
  1. for (int i=0;i<arr.length-1 ;i++ )
  2.                 {
  3.                         for (int j=i+1;j<arr.length ;j++ )
  4.                         {
  5.        if (arr[i]>arr[j<span style="line-height: 30.7999992370605px;">]</span><span style="line-height: 2.2em;">)</span>
复制代码


作者: xhCx    时间: 2015-5-23 23:41
Amu 发表于 2015-5-23 23:33
你的核心代码有问题 冒泡排序和选择排序都搞反了
不要把两数组元素比较的代码放入另一个方法中,比较后在用 ...

好的  谢谢啦!




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